Bądź: Wyszukaj na stronie z użyciem Google
reklama:

piątek, 19 sierpnia 2011

Szczegółowa historia powstania Linuksa okiem kolegi Linusa Torvaldsa

Autor: , 23:05, piątek, 19 sierpnia 2011


Linus Torvalds z siostrą Sarą.
Nie wiem jak was, ale mnie zawsze niemal do bólu ciekawią historyczne zakamarki.

Jak powstał Linux każdy mniej więcej wie, ale czemu akurat wtedy, co o tym myśleli koledzy Linusa? Wreszcie, jak niewiele brakowało by to w ogóle się nie wydarzyło i co spowolniło pracę nad systemem?

Wiele interesujących szczegółów zdradza Lars Wirzenius, jeden z kolegów Linusa Torvaldsa już z okresu studiów. Mam nadzieję, że jego długa opowieść, którą przytoczę poniżej przypomni się wielu z was, gdy będziecie pracowali nad interesującymi projektami. Może warto jednak odłożyć grę, bo świat czeka na wasz rewolucyjny twór?

Poniższy tekst pochodzi z bloga liw.fi. Aut. Lars Wirzenius, tłum. Adrian Nowak, lic. CC-BY-SA.

Linux ma 20 lat. To sporo czasu. Skoro byłem z nim od początku, pomyślałem, że podzielę się moimi wspomnieniami na temat tego, co się stało.

W 1988 roku skończyłem szkołę średnią i dostałem się na Uniwersytet Helsiński by studiować informatykę. Studia rozpoczęły się we wrześniu i właśnie we wrześniu dostałem zaproszenie do Spektrum, klubu dla studiujących matematykę, fizykę, chemię, geografię albo informatykę.

Spektrum był towarzyskim klubem, co było dobre, bo byłem i pozostałem wstydliwy, i społecznie nieprzystosowany, a klub pozwolił mi w łatwy sposób spotykać ludzi, gdy przeniosłem się do nowego miasta. Tam właśnie spotkałem jedynego mówiącego po szwedzku studenta informatyki, chłopaka nazywającego się Linus Torvalds.

To był pierwszy rok. Chodziliśmy częściowo na te same zajęcia, gdyż wszyscy nowi studenci mieli ich wiele wspólnych i spotykaliśmy się też w Spektrum. Wzrastało coś na wzór przyjaźni.

Komputery były wtedy dość drogie, a uniwersytet dostarczał nam klasy pełne pecetów działających pod kontrolą MS-DOS, dodatkowo kilka Maków i parę terminali podłączonych do wielkiego systemu VAX/VMS.

Nigdy zbytnio nie przepadałem za MS-DOS, a zwykle wszystkie komputery z nim były zajęte. Nigdy nie mogłem dość do ładu z kilkoma Makami jakich próbowałem, bo wcześniej nie widziałem GUI. Naturalnie więc przywykłem do terminali, nawet pomimo tego, że jak wtedy uważałem, VAX/VMS był okropnym systemem do użytkowania.

Po świętach Bożego Narodzenia wszystko się trochę zmieniło. Wydział informatyki miał schowany mały komputer Ultrix, zwykle nieużywany, a mi udało się do niego dostać. Ultrix był grudniową wersją Uniksa. Czytałem o Uniksie, częściowo w książce  K&R C i podobało mi się to. Napisałem nawet kilka narzędzi konsolowych dla MS-DOS, które działały podobnie w jak te uniksowe. To była duża radość mieć dostęp do prawdziwego komputera z Uniksem: potoki działały w trybie rzeczywistym, a nie przez pliki tymczasowe! Wiele procesów w tym samym czasie! Nazwy plików nie były nienaturalnie zwężone! To było dość wyzwalające.

Podczas gdy bawiliśmy się Ultriksem, który chyba był nazwany kreeta (fińska nazwa wyspy Kreta), pewnego dnia przypadkowo wpisałem polecenie "rm". Wcześniej wyrobiłem sobie nawyk pisania "em", który był lokalną wersją MicroEMACS, więc z próbowałem nie pomylić poleceń. Tak czy inaczej, tego dnia wpisałem zamiast "rm cośtam" jako "rn cośtam" i odkryłem Usenet.

Po tym, jak ogarnęło mnie w związku z tym całkowite zdumienie, portierzy wyrzucili mnie z budynku, bo już zamykali i poszedłem do domu. Był tam cały świat, z ludźmi którzy rozmawiali o interesujących rzeczach, jak język C i mogłem przyglądać się ich dyskusji. Co mogło być lepsze?

Powiedziałem Linusowi o rn i jemu też się to spodobało. Razem spędzaliśmy o wiele zbyt dużo czasu czytając grupy dyskusyjne. Żaden z nas jednak nic w tym roku jednak nie opublikował. Był tam duży nacisk na to, by nie marnować czasu innych i wzięliśmy to sobie do serca.

W grupie comp.lang.c, która szybko stała się moją ulubioną, rozmawiali ludzie z Bell Labs. Dennis Ritchie dość szybko przestał publikować wiadomości w tej grupie, ale inni wciąż tam byli, jak Andrew Koenig, którego książkę "C Traps and Pitfalls" wtedy czytałem. Jako cichy student pierwszego roku nie ważyłbym się niczego publikować. Linus nie był taki cichy, ale nie chciał publikować czegoś co okazałoby się błędne.

Nasza nauka po raz pierwszy zakończyła się w maju, a w czerwcu oboje rozpoczęliśmy obowiązkową służbę wojskową, ale w różnych miejscach. Nie widziałem Linusa przez rok. Fińska armia kazała mi się zamknąć, przestać myśleć, śpieszyć się, strzelać do ludzi z daleka i zbierać brudne naczynia z restauracji. Moje IQ spadło znacznie w czasie tych dziewięciu miesięcy. Nie podobało mi się to.

Skończyłem moją służbę wojskową w marcu, a niedługo później rozpocząłem letnią pracę, pisząc aplikacje bazodanową dla biura oficjalnych tłumaczy w Finlandii. Aplikacja była napisana w dBASE IV, co nauczyło mnie, że nigdy nie powinienem pozwalać innym, by wybierali za mnie narzędza i to pomimo tego, że można było pisać dobre programy używając złych.

Tamtego lata znów spotkałem się z kolegami z uniwersytetu, w tym Linusem. Jeden ze studentów parę lat starszy niż Linus i ja, Patrik, miał saunę w domu w którym mieszkał i zapraszał naszą grupę raz w tygodniu. Ci zboczeńcy, którzy myślą, że słowo sauna jest synonimem dla domu publicznego mogą sobie przestać wyobrażać orgie: w Finlandii sauny są do kąpieli, leczenia, nawet medytacji, nie seksu.

Tam właśnie powstało znane zdjęcie Linusa, który wyglądał jak nagi, pijącego piwo. Było zrobione właśnie u Patrika przez jedną ze studentek Stinę, a Linus miał założone spodnie. To był letni dzień, więc po prostu nie miał koszulki. Żadnych orgii. Naprawdę.

Kiedy nauka znów rozpoczęła się jesienią, kontynuowałem ją znów w kilku klasach z Linusem, w tych samych grupach, a przede wszystkim, w tych samych pomieszczeniach. Oboje cieszyliśmy się zabawą z Uniksem, a jeden z kursów, który mieliśmy tej jesieni dotyczył języka C i programowania w Uniksie. Znałem C od 1987 roku, kiedy nauczyłem się go używając K&R1 i myślę, że Linus też miał z tym jakieś wcześniejsze doświadczenia. Większość kursu była dla nas prawdopodobnie zbyt podstawowa, więc spędzaliśmy czas na zajęciach takich, jak zwężanie naszych odpowiedzi na zadania do tak małej ilości linii, jak to tylko było możliwe.

Eksplorowaliśmy Uniksa, a także podobne techniczne zagadnienia mając świetną zabawę. Napisałem pierwszy skrypt dla crona, żeby zalać Linusa e-mailami, i pokazać mu, że tak, Unix aktualizuje dostęp do znaczników czasu w czasie rzeczywistym (to zostało poprawione oczywiście w Linuksie). On, pewnego razu zauważył, że uniwersytet ma drukarkę PostsScript, więc napisał jakiś kod w PS, żeby zobaczyć, jak to działa i bawił się drukowaniem stron zawierających rysunki z różnymi figurami.

Mieliśmy świetną zabawę z kreeta, poza czasami gdy ulegał awarii. Unix nie był zbyt stabilnym systemem. Jedną z jego wad było to, że kiedy normalny użytkownik wywoływał mknod, jądro mogło się wysypać w niecałą minutę. W tygodniu, gdy dyskutowaliśmy na lekcjach o programowaniu C w Uniksie, komputer kreeta przez większość czasu nie działał.

Boże Narodzenie w 1990 roku przyszło i minęło, a 5 stycznia Linus kupił nowy komputer. Miał już w domu Sinclair QL, ale chciał peceta z procesorem Intel 386. Wziął studencki kredyt i kupił go. Chciał się uczyć o wielozadaniowości, sprawdzając, jak to robi 386. Niestety kupił też grę Prince of Persia (myślę, że chyba ten tytuł).

Miesiąc później, gdy wreszcie znudził się grą, zaczął rzeczywiście uczyć się programowania 386. Pewnego dnia, gdy go odwiedziłem, pokazał mi mały program, który zrobił, obsługujący wątki. To była niesamowita rzecz, nawet jeśli tak nie wyglądała: jeden wątek pisał litery "A" na ekranie, a drugi "B". Można było obserwować, jak się zmieniają, gdy zakończyło się pisanie "A", a zaczynało "B" i później znów "A".

Niesamowitą rzeczą było, oczywiście, że Linus napisał całość sam. To nie było drogie komercyjne oprogramowanie napisane przez siwiejących magików. To było fajne, ale możliwe do zrobienia przez jedną osobę. To był moment, w którym zdałem sobie sprawę, że jeden programista może osiągnąć świetne rzeczy, a ta tajemnicza technologia mogłaby pod maską być naprawdę dość prosta.

Oczywiście nie spodziewałem się, że zabawy Linusa szybko staną się czymś rzeczywiście istotnym i to z dwóch powodów. Po pierwsze, to tylko "A" i "B", które naprawdę były zbyt proste, by się do czegokolwiek przydać. Po drugie, znałem Linusa od pewnego czasu i wiedziałem, że był inteligentny, ale też leniwy i czasem, gdy się upił, potrafił kłócić się o naprawdę najgłupsze rzeczy, jakie można sobie wyobrazić.

Pomimo to, Linus dalej bawił się wielowątkowością w 386 i robił więcej i więcej, kawałek po kawałku. Jedną z rzeczy, którą chciał zrobić, to uzyskać dostęp do kreeta przez modem. Zamiast używać istniejącego terminala (był beznadziejny), zaczął dodawać proste emulatory terminala do swojego wielowątkowego programu. Miał dwa wątki: jeden odczytywał klawiaturę i wysyłał znaki do portu szeregowego, a drugi odczytywał port szeregowy i zapisywał wyniki na jego ekranie. Po tym, jak dodał interpretację sekwencji VT-100, miał emulator terminala wystarczająco dobry, by czytać Usenet z domu.

Tym jednak czego Linus naprawdę chciał był jednak komputer z Uniksem w domu. Słyszał o Minix i kupił książkę, a także miał Miniksa uruchomionego na swoim komputerze PC 386. Działało, ale było to bardzo dalekie od tego, jak całość sprawowała się ma maszynach w uniwersytecie. Pomimo to, Linus rozwijał Miniksa, usprawniał swój własny wielowątkowy program i ogólnie hackował.

Tej wiosny 1991 roku zaciągnąłem się do pracy na boku, by zdobyć pieniądze na kupno mojego własnego peceta. Praca dotyczyła pisania jakiegoś oprogramowania GIS w C++. Zapomniałem moją wcześniejszą lekcję o pozwalaniu innym, by wybierali moje narzędzia. Ta praca sprawiała, że byłem dość zajęty, więc nie śledziłem dokładnie tego, co robił Linus wiosną i latem.

Pomimo to, pewnego razu dyskutowaliśmy na temat różnych kwestii związanych z programowaniem i wyjaśniał mi coś o pisaniu logów, w swoim wielowątkowym czymś. Miał funkcję, jak 'print_string("error: i="); print_int(i); print_string("\n");'  i byłem dość przerażony. Linus wiedział oczywiście, o funkcji printf w standardowych bibliotekach C, co uczyniłoby całość znacznie prostszym. W tym czasie jednak, gdy pisał - w uproszczeniu - podstawy jądra systemu, standardowa biblioteka nie była dla niego dostępna i nie wiedział, jak napisać swój własny printf.

Więc napisałem dla niego sprintf. To był mój pierwszy udział w tworzeniu jądra Linux. Wciąż tam jest, choć całość została przerobiona teraz do snprintf (i to oczywiście o wiele lepszy interfejs). Linus, będąc sobą pomyślał oczywiście, że może usprawnić kod i poprawił trochę niektóre części. Choć wywołało to grymas na mojej twarzy, do czasu jak był zadowolony, nie było to dla mnie problemem.

Wielowątkowy program Linusa rósł i rósł, zyskiwał też po drodze funkcje, jak sterownik dysku, zarządzanie pamięcią czy systemem plików. Miał wystarczająco z jądra, by móc uruchamiać jakieś aplikacje użytkowe, więc Linus zrobił tak, by mógł kompilować programy na Minix i uruchamiać je na własnym kernelu.

W tym czasie, latem 1991 roku, oboje zaczęliśmy publikować wiadomości w Usenscie. W sierpniu Linus po raz pierwszy wspomniał o swoim projekcie kernela na comp.os.minix. Później zdecydował, że udostępni kod i dostał trochę miejsca od administratorów ftp.funet.fi, by go tam umieścić. Od tej pory, projekt potrzebował nazwy. Linus chciał nazwać go Freax, ale Ari Lemmke, administrator ftp.funet.fi zdecydował, że zamiast tego całość zostanie nazwana Linux. Możesz znaleźć nazwę Freax w plikach Makefile pierwszych wydań Linuksa.

Pierwszego wydania Linuksa nie dało się zainstalować, z tego co sobie przypominam. Linus musiał wymyślić sposób na instalowanie tego systemu operacyjnego. Jego komputer powoli z Minix/386 zaczął transformować się w działający na jądrze Linux. Zaoferowałem mój komputer, a Linus przyszedł i hakował go dopóki mógł na nim zainstalować Linuksa z poziomu bootowalnej dyskietki. Proces instalacji nie był do końca prosty, wymagał edytowania w hex sektorów dysku, ale był to krok w dobrym kierunku.

W ciągu kolejnych miesięcy Linux zdobył coraz większe zainteresowanie, a inni również zaczęli go usprawniać. Podczas przerwy świątecznej w 1991 roku Linus dodał zarządzanie wirtualną pamięcią do jądra i ten jeden prosty krok uczynił Linuksa powszechnie bardziej użytecznym dla prawdziwego świata.

W 1992 roku popularność Linuksa szybko rosła i zaczęło używać go również wielu ludzi, którzy zupełnie nie byli hakerami jądra. Otworzyliśmy własną grupę w Usenecie alt.os.linux, która później zmieniła się w comp.os.linux i podzieliła się na wiele podgrup. W tym 1992 roku pomogłem rozpocząć projekt dokumentacji Linuksa, a później, kiedy stworzono comp.os.linux.announce, zostałem jednym z moderatorów. Wciąż jednak nie hakowałem jądra, byłem przestraszony jego tajemniczą magią.

Wciąż w 1992 roku, Linus myślał, że zbliża się do wydania 1.0, więc przeskoczył z wersji 0.12 do 0.95 w jednym wydaniu. Później przyszły 0.96, 0.96b, 0.96c, a myślę, że były nawet 0.96c++2. W pewnym momencie - myślę, że 0.97 - byłem zmęczony brakiem dokumentacji kernela, więc stworzyłem pierwszy plik README, by pomóc ludziom kompilować swoje własne jądra.

W 1993 roku wspólnie z Linusem zostaliśmy zatrudnieni na uczelni jako asystenci nauczycieli. Pomagaliśmy studentom w ich pracach domowych i sprawdzaliśmy, czy je zrobili. To znaczy, że musieliśmy dzielić biuro. To było dość dobre dla rozwoju Linuksa. Linus miał przychód, więc nie musiał się o to martwić, a co ważniejsze, Linux zdobywał funkcje sieciowe.

Przez pewien czas, Linux nie do końca robił wszystko tak, jak należy jeśli chodzi o networking, więc został zabroniony w uniwersyteckiej sieci. To dało oczywiście Linusowi wiele motywacji, by całość poprawić.

Jedną z rzeczy, które umożliwił dostęp do internetu było to, że w kilka sekund można było pobrać dowolne oprogramowanie, jak na przykład jądro Linuksa. To zniechęciło Linusa do robienia kopii zapasowych, albo stosowania kontroli wersji, poza robieniem częstych wydań archiwalnych, które były skopiowane na wielu serwerach.

Szybki dostęp do internetu pozwolił też Linusowi i mi na obserwowanie różnego rodzaju dystrybucji Linuksa, które zaczęły się pojawiać. Z niewiadomej przyczyny, Linus wybrał Red Hata. Uznałem, że Moc potrzebuje równowagi, więc ja wybrałem Debiana. Długo obstawaliśmy przy tym, co wybraliśmy.

Powstawanie dystrybucji Linuksa było dla niego oczywiście bardzo korzystne. Nawet jeśli systemy były o wiele trudniejsze do używania niż, powiedzmy, Mac czy Windows, przynajmniej nie trzeba było się męczyć z edytorami hex by całość zainstalować i uruchomić. To uczyniło bazę użytkowników znacznie większą i zachęciło także wielu do rozwijania systemu. Kula śnieżna rosła coraz szybciej.

Bycie zatrudnionym w uniwersytecie pomogło nam także, gdy zdecydowaliśmy zorganizować imprezę z okazji wydania Linuksa w wersji 1.0 w 1994 roku. Uzyskaliśmy dostęp do audytorium i najważniejsze osoby z wydziału informatyki wygłosiły swoje przemówienia. Wszyscy dali nam tak duży kredyt zaufania, ze zainteresowały się nami masowe media. Była nawet ekipa telewizyjna, a nagranie można znaleźć wciąż gdzieś w internecie. W czasie przemówień, w tle dokonywaliśmy uroczystej kompilacji jądra 1.0.

W 1997 roku Linus ukończył studia i został zatrudniony przez Transmeta, a zatem przeniósł się do Stanów Zjednoczonych, przez co straciłem z nim bezpośredni kontakt.

Czego się nauczyłem przez te 20 lat?

Najważniejsze, każdy może zmienić świat. Wielkie osiągnięcia składają się z długiej serii małych kroków i posiadanie tego, co w Finlandii nazywamy "sisu" pomaga. Pomaga też, gdy jesteś bystry i wiesz co robisz. Pamiętasz 20-latka, który był bardzo głupi, gdy się upił i opublikował swoje półnagie zdjęcie? Nie wydawał się zbyt mądry, ale też nie poddawał się. To pomaga, gdy się jest głupim ignorantem i z góry myśli "hej, mogę to zrobić", zamiast "to musi być trudne do zrobienia".

Ale najważniejsze, niezależnie od tego, jak wiele wytrwałości masz i jak bystry możesz być, jest dobrze, gdy masz kogoś do pomocy. Rewolucja zajmuje dekadę, przynajmniej, ale nie można jej dokonać, gdy się jest samemu.

Wolność to też istotna rzecz. Wolność użytkowania, nauki, udostępniania, modyfikowania, udostępniania zmodyfikowanego oprogramowania i wolność w pisaniu oprogramowania są niezbędne. Są niezbędne nie tylko dla Linuksa, ale dla dobrobytu wszystkich ludzi w nowoczesnym świecie.

Przez ostatnich 10 lat byliśmy świadkami rewolucji. Linux był tego częścią, ale nie jedyną. Internet był jednym z najistotniejszytch osiągnięć, wolność w oprogramowaniu kolejnym. Najważniejszym w rewolucji jest zamienić ludzi z pasywnych konsumentów oglądających telewizję w kreatywne istoty, nadające kształt światu. Rewolucja wolności wciąż oczywiście się odbywa.

Miejmy nadzieję, że Linux i wolne oprogramowanie będą z nami przez następne 20 lat i pomogą naturze dokonywać kolejnych rewolucji.
blog comments powered by Disqus

Prześlij komentarz


Popularne posty

Etykiety