Przepraszam, jeśli to pytanie jest nie na temat, ale jednocześnie jest to pytanie ekonomiczne i programistyczne. Jeśli powinien on przejść do innej wspólnoty SE, proszę wskazać mnie.
Teoretycznie oprogramowanie GNU jest w całości opracowywane przez wolontariuszy w czasie wolnym lub przez firmy, które dobrowolnie finansują programistów w celu opracowania oprogramowania GNU (poprzez wykorzystanie dochodów z innego sektora ich działalności).
Rozumiem, jak to może doskonale działać w przypadku projektów na małą skalę, które mogą być wykonane w kilka deszczowych weekendów przez pojedynczą osobę (powiedzmy na przykład grę sudoku), ponieważ w końcu programowanie komputerowe jest niezwykle zabawnym i satysfakcjonującym hobby, i nie mam problemu z widzeniem ludzi tworzących małe lub średnie programy w czasie wolnym i dzielących się nimi ze światem.
Problem polega na tym, że skaluje się wyjątkowo słabo w przypadku większych programów z następujących powodów:
- Choć programowanie jest tak zabawne, że projekt, który trzeba wdrożyć, staje się większy, czas potrzebny do wdrożenia pożądanej funkcjonalności rośnie niezwykle szybko. Opracowanie programu na większą skalę zajmuje niewiarygodnie dużo czasu, na przykład może to zająć 15 lat wolnego czasu i urlopu dla osoby fizycznej na zaprogramowanie systemu operacyjnego, a do czasu wydania jego oprogramowania będzie całkowicie przestarzałe .
- Podczas gdy inni piszą programy w inny sposób niż to, co byś zrobił, czytanie i rozumienie cudzego kodu zajmuje dużo czasu, w większości przypadków tak samo, jak pisanie własnego kodu od zera. Modyfikacja kodu innej osoby i próba jego ulepszenia, jak zachęca to filozofia GNU, jest prawie tak samo czasochłonna, jak opracowanie własnego klona wspomnianego programu z funkcjonalnością, którą chcesz dodać.
- Gdy tylko 2 lub więcej osób będzie musiało współpracować, aby opracować większy program, powstaje wiele problemów związanych z podejmowaniem decyzji, które nigdy nie powstałyby w przypadku projektu jednego dewelopera. Rezultat jest taki, że na przykład, jeśli grupa 2 programistów współpracuje nad projektem, który zajęłby 10 lat dla jednego człowieka, nie zrobią tego za 5 lat, ale prawdopodobnie za 8.
- Jeśli ludzie, którzy współpracują w ramach tego samego projektu, spotykają się wyłącznie w Internecie, łatwo jednemu z członków projektu może nagle zniknąć (albo dlatego, że stracił zainteresowanie, albo dlatego, że fizycznie nie może już być w Internecie), dzięki czemu współpraca nawet trudniej
Tak więc, choć doskonale rozumiem, jak proste programy można opracowywać w myśleniu GNU, absolutnie nie rozumiem, w jaki sposób tak duże programy, takie jak GNU / Linux lub gcc są możliwe w tym modelu. gcc to około 7 milionów linii kodu. Wiem, że wiersze kodu nie mają większego znaczenia, ponieważ na późniejszym etapie projektu bardziej produktywny programista to taki, który faktycznie usuwa wiersze kodu (upraszczając i / lub optymalizując projekt), ale daje to przegląd tego, jak ogromne jest jest gcc projektu.
Więc teoretycznie każdy może dowolnie modyfikować gcc w czasie wolnym, ale w praktyce? Został opracowany przez bardzo profesjonalnych ludzi jako praca, a nie hobby. Każdy, kto tworzy kompilator jako hobby, ostatecznie się podda, ponieważ koszt / korzyść nie jest tego warte:
- Opracowanie dużego programu to tak długofalowy ogromny projekt, że wolą spędzać wolny czas na innych zajęciach, które są bardziej satysfakcjonujące lub przyjemniejsze w krótkim okresie
- Gdyby mimo to opracowali duży program, woleliby to zrobić dla firmy, która je zapłaci, niż robić to za darmo
Aby zainteresować ludzi tworzeniem programu takiego jak GNU / Linux, gcc lub Open Office na dłuższą metę, powinno to być satysfakcjonujące. Więc moje pytanie brzmi: dlaczego ludzie wnoszą wkład w duży projekt GNU, skoro nie otrzymują za to wynagrodzenia?