Dlaczego niektóre biblioteki open source nie zapewniają plików binarnych?

15

Dlaczego niektóre biblioteki open source nie zapewniają plików binarnych? Zauważyłem, że niektóre projekty odkładają się na strony trzecie, które utrzymują bieżące wersje oprogramowania, szczególnie dla wersji Windows.

Pytam, ponieważ wydaje się to barierą dla przyjęcia biblioteki. To więcej pracy dla programisty, ponieważ musi on skonfigurować swoje środowisko, aby je zbudować. Deweloper musi się również martwić, że wprowadził błędy, nieprawidłowo budując bibliotekę.


EDYCJA : Niektóre aktualizacje dotyczące komentarzy i odpowiedzi. Usunąłem przykłady, ponieważ nie są one kluczowe w dyskusji. Przeformułowałem również moje pytanie, ponieważ „niektóre biblioteki open source zapewniają” zamiast „biblioteki open source mają tendencję do dostarczania” ... nie zdawałem sobie sprawy, że ludzie będą się obrażać.

M. Dudley
źródło
7
"zmierzać"? Dwa przykłady to tendencja? Czy masz więcej danych na poparcie swojego roszczenia?
S.Lott
3
Menedżery pakietów Linux są zwykle używane do wdrażania plików binarnych, więc nie rozumiem tego odwołania.
David Thornley,
7
Ponieważ są leniwymi hipisami z wykształceniem wyższym (najgorszym rodzajem hipisów).
Job
7
Tak, cholerni hipisi pisanie oprogramowania za darmo, którego używa połowa świata, pieprzyć je!
Tamás Szelei
3
@CodeinChaos: Nie budowałem od źródła od lat. Fedora, Mac OS i OpenSuSE muszą być dziwnymi wyjątkami od tej „tendencji”. Jakiego systemu operacyjnego używasz, który jest tak słabo obsługiwany? Jeśli to możliwe, chciałbym tego uniknąć.
S.Lott

Odpowiedzi:

11

Ponieważ tworzenie plików binarnych dla systemu Windows to zupełnie inne zadanie, wymagające zupełnie innej bazy wiedzy i zestawu narzędzi. Wydaje się, że ludzie mają trudności z zrozumieniem tego o programistach Linuksa, więc pozwól mi to odwrócić.

  • Używałeś systemu Windows do czegoś, co wydaje się wieczne.
  • System Windows jest zainstalowany tylko w domu.
  • Używałeś Linuksa tu i tam w pracy, ale tylko jako użytkownik, nie administrując ani nie rozwijając dla Linuksa.
  • Wiesz, że gcc jest najczęściej używanym kompilatorem dla Linuksa, ale nigdy nie instalowałeś go na swoim komputerze.
  • Pracujesz głównie nad oprogramowaniem dla systemu Windows, ale nie przeszkadza ci poprawianie błędów w systemie Linux, jeśli ktoś inny pracuje nad tym, aby był on kompatybilny i rozpowszechniał pliki binarne.
  • Nie chcesz płacić za inny system operacyjny i zestaw narzędzi, gdy ktoś, kto już go ma, jest całkowicie skłonny do tworzenia kompilacji.
Karl Bielefeldt
źródło
2
Podsumowując, niektórzy programiści nie mają wiedzy, zasobów ani motywacji do tworzenia plików binarnych dla innych platform.
M. Dudley,
11

Kair to biblioteka, a nie aplikacja. Postgres wydaje się mieć pliki binarne Windows . Mniejsze projekty często nie zapewniają kompilacji, ponieważ nie mają infrastruktury / zasobów.

phaylon
źródło
4
+1, szczególnie „nie masz zasobów”. Trudno dostarczyć przetestowaną kompilację systemu Windows, jeśli nie masz licencji na system Windows, nie masz kompilatora Windows (lub czasu na eksperymentowanie z kompilatorami krzyżowymi) itp.
Steve314,
1
@ Steve314: Każdy ma kompilator Windows - albo gcc typu open source, albo darmowy Visual Studio Express.
gbjbaanb
1
Biblioteka może również mieć pliki binarne, a mianowicie biblioteki dll. Często nie mam kompilatora (zainstalowanego) ani zależności do zbudowania oryginalnej biblioteki. Tak jak pobieranie plików binarnych, nawet dla bibliotek.
CodesInChaos
4
@CodeInChaos: Linux nie używa .dllczęsto, więc te pliki binarne byłyby w większości bezużyteczne dla niektórych z nas. Lepsze byłoby czyste źródło.
S.Lott
9
@gbjbaanb: Nie każdy ma instalację Windows, a co dopiero kompilator.
David Thornley,
9

Jest to część filozofii open source: „jeśli chcesz coś zrobić, weź łopatę”. Oczywiście zmniejsza obciążenie programistów, jeśli użytkownicy po prostu sami skompilują program. Nie musisz się martwić wszystkimi architekturami, systemami operacyjnymi itp.

Ale jeśli tworzysz produkt na poziomie konsumenckim (Firefox, Paint.NET, Audacity, Keepass itp.) I zależy ci na pozyskiwaniu użytkowników, zawsze, zawsze, zawsze! obejmują pliki binarne. Prawdopodobnie tylko 2% osób, które natkną się na twoją stronę internetową i są zainteresowane twoim produktem, zamierza:

  • Pobierz odpowiedniego klienta SCM
  • Sprawdź całą kopię drzewa źródłowego
  • Pobierz potrzebne narzędzia IDE lub kompilatora (łatwo kilkaset MB dla niektórych projektów)
  • Pobierz i zainstaluj wszystkie potrzebne zależności (i ustaw zmienne środowiskowe)
  • Uruchom świeżą kompilację (w niektórych projektach łatwo 10-minutowy proces)
  • Radzimy sobie z wszelkimi błędami lub problemami lub pojawią się (które w małych projektach prawdopodobnie nie są udokumentowane - „o tak, najnowsze są w rzeczywistości przepisywane przez oddziały, a nie pień!”)
  • Odinstaluj wszystko lub pozostaw to wszystko na komputerze i ponownie skompiluj w celu uzyskania aktualizacji.

(Oczywiście w systemie Linux rzeczy są znacznie zdrowsze, ale większość konsumentów nadal korzysta z systemu Windows).

Nowicjuszom jest o wiele łatwiej powiedzieć „och, wersja Windows! Pobierz. Uruchom”.

Jednak wiele projektów typu open source nie ma poziomu konsumenckiego; są skierowane do programistów, którzy mają znacznie wyższą tolerancję na tego rodzaju próby, więc pliki binarne to majsterkowanie. Z mojego doświadczenia wynika, że ​​programiści mogą być tak samo leniwi jak użytkownicy, więc ostrzegam. :)

Phil Cohen
źródło
Są to dokładnie takie problemy, które sprawiły, że zadałem to pytanie.
M. Dudley,
3
Kto rozpowszechniałby projekt, który wymaga zbudowania IDE? I ludzie zwykle nie dystrybuują w SCM. To bardziej jak wget, tar xfz, ./configure, make, su -c 'make install' ...
alternatywnie
Dobre punkty, matematyka. A bardziej nowoczesne hosty SCM (takie jak GitHub) pozwolą ci mimo to pobrać spakowaną kopię najnowszej wersji.
Phil Cohen
@mathepic: Programiści Windows, to kto.
Stuart P. Bentley,
Projekty @Stuart VS to tylko pliki msbuild. IDE nie jest potrzebne.
alternatywnie
6

Twórcy aplikacji napisanych w środowisku Write Once Compile Anywhere (C, C ++, itp.) Czerpią korzyści z przesunięcia kroku kompilacji do dystrybutorów (apt, rpm, yum itp.), Którzy tworzą i pakują pliki binarne dla popularnych architektur. Pozwala to uzyskać maksymalnie przenośną aplikację przy mniejszym wysiłku ze strony twórców i pozwala im poświęcić więcej czasu na skupienie się na ich podstawowych kompetencjach (rozwijaniu aplikacji, a nie kompilowaniu i hostowaniu jej dla wielu architektur). Niektórzy twórcy aplikacji WOCA są gotowi ponieść dodatkowy koszt w szczególnych przypadkach, takich jak Windows, ponieważ - no cóż - nikt inny tego nie zrobi, użytkownicy tego oczekują i nie chcą rezygnować z rynku.

Z drugiej strony aplikacje napisane w środowisku Write Once Run Anywhere (Java) lub dla określonej architektury docelowej (na przykład aplikacje OS X) są w stanie dostarczyć jeden plik binarny i często to robią, ponieważ muszą płacić tylko za kompilację kosztować raz.

Wreszcie, ich użytkownicy zazwyczaj czują się komfortowo, budując ze źródła lub używając menedżera pakietów systemu operacyjnego, więc ten model zapewnia również lepszą użyteczność. Użytkownicy wiedzą, skąd wziąć pliki binarne (menedżer pakietów), mają spójne doświadczenie w zakresie instalacji i zarządzania pakietami, a także wiedzą, gdzie uzyskać źródło, jeśli jest to potrzebne.

Rein Henrichs
źródło
2
Jednym z problemów z zapisem po uruchomieniu w dowolnym miejscu jest to, że maszyna wirtualna jest programem sama w sobie, z punktu widzenia systemu operacyjnego. Na przykład większość zapór systemu Windows umożliwia udzielanie / odmawianie dostępu do sieci na zasadzie aplikacja po aplikacji. Ale większość z nich nie może odróżnić jednej aplikacji Java od drugiej - przyznają / odmawiają dostępu do JVM, ale jeśli masz jedną aplikację Java, która działa jak serwer internetowy (być może Azureus), wówczas zapora ogniowa nie zablokuje żadnego nieznanego nieuczciwego Aplikacja Java działająca jako serwer. Jeśli istnieje rozwiązanie specyficzne dla Java, jestem przykładem użytkownika Java, który nie wie o tym.
Steve314
1
@ Steve Nie zgadzam się z tobą per se, ale tak naprawdę nie rozumiem, jak zalety / wady WOCA lub WORA są istotne dla tego pytania.
Rein Henrichs
styczna, prawda, ale w pytaniu, które jest już trochę wojną religijną między Linuksem a Windows itp., może jedną z mniejszych zbrodni. BTW - Dałem +1 twojej odpowiedzi jako przydatne.
Steve314,
Wojna religijna! Wezmę smołę, a ty pióra?
Rein Henrichs
5

Dlaczego miałbym chcieć zwiększyć przepustowość, zapewniając kompilację (która oczywiście może być bardzo duża), a nie budować źródło, które i tak zapewniam? Nie wspominając już o tym, że zbudowanie projektu na własnej maszynie zawsze da lepsze wyniki, ponieważ jest skompilowane specjalnie dla Twojej platformy.

Demian Brecht
źródło
4
+1 - ale wątpię „zawsze” (zależy od używanej platformy), a korzyści te mogą przynieść użytkownikowi pewien koszt - potrzeba kompilatora, konieczność korzystania z niego, wiedza o tym, jak zbudować ten konkretny projekt, który musi poświęcić czas na badanie i zgłaszanie dziwnych błędów, które pojawiają się tylko na konkretnej platformie itp.
Steve314,
1
@ steve314: +1, wszystkie prawdziwe punkty :)
Demian Brecht
7
Kilka plików binarnych zwykle nie jest takich dużych. Koszt czasu dla użytkownika jest zwykle bardzo duży. Znalezienie wszystkich zależności i zastanowienie się, jak zbudować ten konkretny projekt, zajmuje sporo czasu. Nawet jeśli użytkownik jest programistą. Jeśli użytkownik nie jest programistą, może prawie zapomnieć o twoim produkcie. I myślę, że argument dotyczący wydajności jest przereklamowany. Zwykle nie potrzebujesz tego ostatniego procentu wydajności, a jeśli tak, nadal możesz dowiedzieć się, jak budować ze źródła.
CodesInChaos
1
@codeinchaos: To całkowicie zależy od projektu (rozmiar). Kompilacja może obejmować pojedynczy plik binarny lub kilkaset MB (jeśli nie więcej) w plikach binarnych i nieskompilowanych zasobach (np. Gry). Oczywiście czasami przybijanie zależności może być trochę uciążliwe, ale to do autora pakietu należy dostarczenie listy lub mechanizm pobierania / budowania zależności w czasie kompilacji (kolekcja portów FreeBSD jest do tego świetna ) . Projekty skierowane do nie-programistów prawie zawsze będą miały gdzieś listę plików binarnych / instalacyjnych.
Demian Brecht
Rzecz w tym, że wiele projektów typu open source nie jest „produktami” w zwykłym znaczeniu. Ponieważ w otwartym kodzie źródłowym chodzi o dopuszczanie wkładów w różnych formach, zachęcanie innych osób do udostępniania plików binarnych, które wiedzą, jak to zrobić i mieć czas na ich utrzymanie, wydaje się dobrym pomysłem.
phaylon
2

Mogę wymyślić dwa powody.

Po pierwsze, masz wiele systemów operacyjnych działających na wielu typach sprzętu; liczba binarnych celów, które musiałbyś zbudować, staje się niemożliwa do zarządzania. Istnieją trzy wersje systemu Windows nadal powszechnie używane (XP, Vista, 7) działające na sprzęcie 32-bitowym lub 64-bitowym; to 6 celów binarnych. Gorzej jest po stronie Linuksa, ze znacznie większą różnorodnością dystrybucji działających na Bogu wie, jaki sprzęt (x86, PPC, MIPS, SPARC, PA-RISC itp.). Czy zamierzasz budować dla każdej możliwej kombinacji? Czy masz do tego sprzęt i / lub oprogramowanie? Jeśli ktoś jeszcze tam działa (Boże, pomóż nam) NT na PII, czy zbudujesz dla nich plik binarny?

Po drugie, źródło wysyłki oznacza, że ​​użytkownicy mogą zoptymalizować kompilację pod kątem konkretnego środowiska; mogą włączyć wszelkie optymalizacje, których potrzebują, lub w razie potrzeby dostosować samo źródło.

John Bode
źródło
więc myślę, że odpowiedzią jest użycie czegoś takiego jak serwery kompilacji Sourceforge. Zameldowanie, pozwól im zbudować wiele plików binarnych. Takich jak en.opensuse.org/Build_Service
gbjbaanb
1
Ponieważ programy te zwykle nie używają żadnych specjalnych funkcji Vista / Win7, a programy 32-bitowe działają na 64-bitowych systemach operacyjnych, prawie zawsze można uciec od jednego 32-bitowego pliku binarnego WinXP dla wszystkich użytkowników systemu Windows.
CodesInChaos
@CodeInChaos - +1 - niektóre projekty zapewniają zarówno 32-bitowe, jak i 64-bitowe pliki binarne, ale oferuje więcej wariantów niż to rzadkie. Jednak ważny punkt.
Steve314,
@gbjbaanb - odpowiedź, na pewno, ale prawdopodobnie nie odpowiedź.
Steve314
2

Zazwyczaj wartość projektu typu open source, czy to aplikacji, systemu, modułu czy biblioteki, polega na tym, że można go badać i / lub modyfikować w razie potrzeby. Dystrybucja źródła jest nieodłącznym elementem modelu publikowania.

Dystrybucja pliku binarnego wiąże się z ryzykiem, że został zmodyfikowany w jakiś sposób w niecnych celach. Kompilowanie projektu ze źródła próbuje zminimalizować to ryzyko.

Rob Raisch
źródło
W przypadku aplikacji> 90% użytkowników nigdy nawet nie spojrzy na źródło. Ryzyko manipulacji jest czymś, co chętnie podejmuje większość osób pobierających pliki binarne. Nie mogą (a nawet gdyby mogli, byliby zbyt leniwi), aby sprawdzić, czy kod źródłowy nie zawiera złośliwego kodu.
CodesInChaos
2
To prawda, ale OP zapytał, dlaczego projekty typu open source zwykle nie są dystrybuowane jako pliki binarne, a nie „jako użytkownik, dlaczego muszę to wszystko kompilować?” ;-)
Rob Raisch
Ale twoje argumenty dotyczą tego, dlaczego dla użytkownika lepiej jest, aby pobierał źródło, a nie pliki binarne.
CodesInChaos
1
Zabawne, nie widzę słowa „użytkownik” ani w mojej odpowiedzi, ani w pierwotnym pytaniu. Być może źle czytam własną odpowiedź?
Rob Raisch
1
Interesujące, że wydajesz się być zdeterminowany, aby źle interpretować moje komentarze, ponieważ nie próbowałem podać „powodu, dla którego nie dostarczyłem plików binarnych”. Podałem po prostu wyjaśnienie, dlaczego projekty typu open source są zazwyczaj dystrybuowane jako kod źródłowy. Dzięki za grę, ale to mój ostatni komentarz na ten temat.
Rob Raisch
1

Może to mieć kilka przyczyn. Wiele (jeśli nie większość) projektów typu open source rozpoczyna się w systemie Linux. Tak więc początkowy projekt jest wykonywany dla tego systemu, a pakowanie jest wykonywane przez członków zespołu.

Tworzenie instalatora Windows to dodatkowa praca, która wymaga wiedzy, której mogą nie mieć programiści systemu Linux. Więc jeśli ktoś spoza podstawowego zespołu podejmie tę pracę, często jest o tym wspominany.

To samo może dotyczyć innych systemów, takich jak OS X, a nawet określonych dystrybucji Linuksa. Wszystko zależy od tego, kto ma wiedzę i czas na wykonanie dodatkowej pracy.

Thorsten Müller
źródło
Instalator Windows rzadko jest wymagany. Plik zip z plikami binarnymi też jest w porządku. Ale oczywiście masz rację, że wielu deweloperów opartych na systemie Linux nie dba o wersję swojego programu dla Windows.
CodesInChaos
1
Plik zip może być wielkim utrudnieniem w świecie Windows. „Pobrałem ten plik. Teraz, kiedy klikam, system Windows mówi mi, że jego „nieznany format pliku” jest dość częstym problemem na forach pomocy.
thorsten müller
Opublikowałem wszystkie moje rzeczy jako pliki .zip. Myślę, że jedyną skargą, jaką otrzymałem w tym kontekście, był facet, któremu udało się skopiować plik exe na pulpit zamiast tworzyć łącze. Ale w każdym razie trudność budowania ze źródła jest znacznie większa niż trudność rozpakowania czegoś.
CodesInChaos
1
Zależy częściowo od bazy użytkowników. Jeśli opublikujesz bibliotekę używaną tylko przez programistów, nie będziesz mieć problemów z plikami zip. Zip jest dość łatwy, więc każda publiczność z podstawową wiedzą to zrobi. Chociaż dość często widziałem pytanie o zip ...
thorsten müller
1
Należy pamiętać, że w XP + pliki zip są obsługiwane natywnie przez system operacyjny, a wystarczające podwójne kliknięcie otworzy plik w rozpakowanym folderze.
Phil Cohen