Historia Unix i Linux: od Bell Labs do dzisiaj
Analiza ewolucji systemów Unix i Linux od 1969 roku. Wyjaśnienie wpływu licencji AT&T, sporu prawnego z 1992 roku oraz przyczyn dominacji jądra Linux w nowoczesnych serwerach.
Krótka historia systemów Unix i Linux
Historia systemów Unix i Linux to długi spór o prawo własności do kodu źródłowego. System Unix powstał w Bell Labs w 1969 roku. System Linux powstał w Helsinkach w 1991 roku i nie zawiera żadnego fragmentu oryginalnego kodu. Wspólnym elementem obu systemów jest projekt oraz zestaw opublikowanych interfejsów: pliki, procesy, potoki oraz powłoka (shell) łącząca małe programy w całość. W latach 70. XX wieku Unix rozpowszechnił się na uczelniach, ponieważ ugoda antymonopolowa z 1956 roku zabraniała firmie AT&T (American Telephone and Telegraph) sprzedaży oprogramowania, więc Bell Labs tanio licencjonowało kod źródłowy. Unix trafił wszędzie, nie należąc do nikogo poza AT&T, a późniejsze spory licencyjne zdecydowały o tym, który wolny system typu Unix ostatecznie znalazł się w szafie serwerowej.
1969: zapasowy PDP-7 i idee, które przetrwały
Laboratoria Bell wycofały się z projektu Multics w 1969 roku. Multics (multiplexed information and computing service) był rozbudowanym systemem z podziałem czasu, tworzonym wspólnie z MIT oraz General Electric, jednak Laboratoria uznały go za zbyt złożony, by doprowadzić go do końca. Ken Thompson zachował wybrane koncepcje, odrzucając resztę, i napisał niewielki system z podziałem czasu na wycofanym z eksploatacji minikomputerze PDP-7. Dołączył do niego Dennis Ritchie. Nazwa Unix była żartem wymierzonym w Multics.
W 1970 roku system przeniesiono na PDP-11, zakupiony przez Laboratoria dla maszynistek z działu patentowego, ponieważ łatwiej było uzyskać finansowanie na narzędzie do przetwarzania tekstu niż na system operacyjny. Maszyna ta posiadała 24 KB pamięci rdzeniowej, dzielonej między system a programy użytkownika. Ten przypadek finansowy jest powodem, dla którego pierwszy podręcznik Unix, datowany na listopad 1971 roku, stanowił zbiór sformatowanych dokumentów i dlaczego do dziś wpisuje się man 5 crontab. Numery sekcji w tamtym podręczniku odpowiadają numerom sekcji w obecnym.
Dwie zmiany utrwaliły ten projekt. Potoki (pipes) pojawiły się w wersji 3 w 1973 roku, ponieważ Doug McIlroy od lat argumentował, że programy powinny móc łączyć się szeregowo, a Thompson dodał operator |, dzięki któremu wyjście jednego programu stawało się wejściem kolejnego. Następnie wersja 4, również w 1973 roku, została przepisana w języku C. System operacyjny napisany w przenośnym języku może zostać przeniesiony na sprzęt, dla którego nie został stworzony, co wyjaśnia, dlaczego Unix przetrwał każdą maszynę, na której powstał.
Dlaczego Unix zyskał popularność: AT&T nie mogło go sprzedawać
Ugoda sądowa z 1956 roku zakończyła sprawę antymonopolową przeciwko AT&T. AT&T utrzymało monopol telefoniczny, akceptując w zamian ograniczenie: firma miała pozostać poza rynkami innymi niż telekomunikacja. Oprogramowanie było jednym z tych obszarów. Dlatego, gdy uniwersytety prosiły o Unix, Bell Labs nie mogło sprzedawać go jako produktu. Licencjonowano kod źródłowy za symboliczną opłatą, bez wsparcia i bez gwarancji.
Skutek był ogromny i nieplanowany przez AT&T. Sixth Edition Unix, wydany w 1975 roku, trafił do setek wydziałów informatyki wraz z pełnym kodem źródłowym. John Lions z University of New South Wales wydrukował kod jądra wraz z komentarzem linia po linii i prowadził na jego podstawie zajęcia. Całe pokolenie nauczyło się działania systemu operacyjnego, analizując rzeczywisty kod.
Następnie licencja uległa zmianie. Licencja Seventh Edition z 1979 roku zabraniała używania kodu źródłowego na zajęciach, więc komentarz Lionsa krążył w formie kserokopii kserokopii. Tak wyglądała cała ta historia. Unix był wszędzie i jednocześnie nie był wolny, więc każde ulepszenie wprowadzone przez kogokolwiek stawało się ulepszeniem cudzego, własnościowego kodu.
Berkeley: elementy systemu Unix, z których faktycznie korzystasz
Ken Thompson spędził rok akademicki 1975–1976 na University of California w Berkeley, pozostawiając po sobie bardzo aktywną grupę zajmującą się systemem Unix. Grupa Computer Systems Research Group (CSRG) z Berkeley wysyłała taśmy z lokalnymi usprawnieniami, które stały się podstawą BSD, czyli Berkeley Software Distribution. Bill Joy odpowiadał za znaczną część wczesnych prac: 1BSD w 1978 roku, a następnie 2BSD w 1979 roku, wprowadzając edytor vi oraz powłokę C shell.
Powłoka C shell jest źródłem mechanizmów !! oraz !$. Bash przejął tę składnię, co wyjaśnia, dlaczego rozwijanie historii w bash wciąż zaskakuje użytkowników wpisujących wykrzyknik wewnątrz cudzysłowów czterdzieści lat później.
Następnie agencja DARPA (amerykańska agencja badawcza Defense Advanced Research Projects Agency) opłaciła wdrożenie nowych protokołów internetowych do systemu Unix w Berkeley. Wersja 4.2BSD, wydana w sierpniu 1983 roku, zawierała implementację TCP/IP (transmission control protocol over internet protocol) oraz interfejs programowania aplikacji socket. Każda usługa sieciowa na Twoim serwerze nadal wywołuje w tej kolejności funkcje socket(), bind(), listen() oraz accept(), ponieważ to właśnie Berkeley wybrało te nazwy w 1983 roku.
Jeden szczegół zadecydował o kształcie kolejnej dekady. Taśma BSD nie stanowiła kompletnego systemu. Był to zestaw dodatków do systemu Unix firmy AT&T, a do legalnego uruchomienia wymagana była ważna licencja na kod źródłowy AT&T. Przez kilka lat Berkeley zastępowało części pochodzące od AT&T własnym kodem, plik po pliku. Pytanie, czy ta wymiana była w pełni kompletna, stało się później przedmiotem rozprawy sądowej.
1984: rozpad i wojny Unix
System Bell został rozwiązany 1 stycznia 1984 roku, a wraz z nim wygasł dekret o zgodzie, który powstrzymywał AT&T przed działalnością na rynku oprogramowania. AT&T mogło teraz sprzedawać Unix jako produkt, co też uczyniło. Komercyjne licencje na kod źródłowy stały się kosztowne, więc Unix przestał być tanim narzędziem przekazywanym studentom przez uczelnie.
Dostawcy już wcześniej dokonali forkowania systemu. Każdy producent stacji roboczych dostarczał własną wersję Unix na własny sprzęt, więc pod koniec lat 80. program napisany dla jednej platformy wymagał portowania na kolejną. W 1988 roku branża podzieliła się na dwa obozy standardów: Open Software Foundation oraz Unix International. Przez lata dostarczano niekompatybilne systemy, spierając się o to, który Unix jest tym prawdziwym.
Z tego chaosu wyłonił się POSIX (portable operating system interface). Standard IEEE 1003.1 opublikowano w 1988 roku; określał on, co musi robić system typu Unix: wywołania systemowe, zachowanie powłoki, standardowe narzędzia oraz interfejsy biblioteki C. Ma to większe znaczenie, niż mogłoby się wydawać, ponieważ standard jest specyfikacją, której nie obejmuje żadna licencja. Trzy lata później student napisał jądro w oparciu o te dokumenty.
Minix i luka, którą pozostawił
Andrew Tanenbaum udostępnił Minix w 1987 roku jako system edukacyjny do swojego podręcznika o systemach operacyjnych. Minix był niewielkim systemem typu Unix, którego kod źródłowy dołączono do książki, a uruchomienie go było możliwe na tanich komputerach PC posiadanych przez studentów. Analiza kodu w warunkach akademickich była legalna, w przeciwieństwie do Seventh Edition Unix.
Minix celowo pozostał systemem o małych rozmiarach, ponieważ musiał być zrozumiały w ramach podręcznika, a Tanenbaum odrzucał poprawki, które mogłyby przekształcić go w system produkcyjny. Licencja również nie była wolna: użytkownik kupował książkę, a decyzja o redystrybucji zmodyfikowanego systemu Minix nie należała do niego. W rezultacie do 1991 roku student mógł zapoznać się z działającym jądrem typu Unix, ale nie mógł zbudować na jego bazie żadnego trwałego rozwiązania.
GNU posiadało wszystko oprócz jądra
Richard Stallman ogłosił projekt GNU we wrześniu 1983 roku, dążąc do stworzenia kompletnego, wolnego systemu typu Unix. Do 1991 roku w ramach GNU powstała większość komponentów otaczających jądro: kompilator GCC, biblioteka GNU C, narzędzia binarne oraz bash – powłoka napisana przez Briana Foxa w 1989 roku, w której Twój serwer nadal uruchamia sesję użytkownika. Jądro GNU, Hurd, było elementem, którego wciąż brakowało.
Licencja GNU General Public License w wersji 2 została opublikowana w czerwcu 1991 roku. Jej zasada jest krótka. Możesz korzystać z kodu i zmieniać go, a jeśli rozpowszechniasz wynik swojej pracy, musisz udostępnić kod źródłowy na tych samych warunkach. Ta zasada stanie się kluczowym punktem tej historii za dwie sekcje.
Sierpień 1991: post w grupie comp.os.minix
25 sierpnia 1991 roku student z Helsinek opublikował w grupie dyskusyjnej Usenet comp.os.minix następującą wiadomość:
Hello everybody out there using minix -
I'm doing a (free) operating system (just a hobby, won't be big and
professional like gnu) for 386(486) AT clones.Wersja 0.01 została wydana we wrześniu 1991 roku. Nie współdzieliła kodu ani z Unixem, ani z Minixem. Było to nowe jądro dla architektury 386, opracowane na maszynie z systemem Minix, napisane zgodnie z interfejsami POSIX i połączone z istniejącymi już narzędziami GNU. W styczniu 1992 roku Tanenbaum stwierdził w rozmowie z Torvaldsem, że jądro monolityczne to przestarzała konstrukcja. Miał rację w kwestii projektowej, jednak Torvalds odpowiadał na inne pytanie: co działa wydajnie na jednym, tanim komputerze, który posiada student.
W lutym 1992 roku wersja 0.12 została udostępniona na licencji GPL. Torvalds uznał później tę decyzję za swoją najlepszą. Pierwotna licencja Linuxa zabraniała jakichkolwiek transakcji finansowych, co zablokowałoby rozwój dystrybutorów płyt CD oraz firm wsparcia technicznego, które pojawiły się w późniejszym czasie. Licencja GPL umożliwiła prowadzenie działalności komercyjnej, jednocześnie wymuszając włączanie każdej rozpowszechnianej zmiany z powrotem do tego samego, wspólnego drzewa kodu.
Sprawa sądowa: kwiecień 1992 – luty 1994
W czerwcu 1991 roku Berkeley wydało Networking Release 2 (Net/2): niemal kompletny system BSD, z którego usunięto pliki pochodzące od AT&T. Brakowało sześciu plików jądra. Bill i Lynne Jolitz napisali zamienniki i w marcu 1992 roku wydali 386BSD 0.0, a 14 lipca 1992 roku 386BSD 0.1. Wolny, kompletny i dojrzały system BSD dla architektury 386 stał się faktem w momencie, gdy Linux był jeszcze tylko hobbystycznym jądrem. Firma Berkeley Software Design, Inc. (BSDi) sprzedawała wspieraną komercyjną wersję BSD/386, reklamując ją numerem telefonu 1-800-ITS-UNIX.
W kwietniu 1992 roku Unix System Laboratories (USL), spółka zależna AT&T będąca wówczas właścicielem Unix, pozwała BSDi przed sądem federalnym w New Jersey, zarzucając naruszenie tajemnic handlowych oraz znaku towarowego Unix. Pozew został później rozszerzony o Regents of the University of California. Uniwersytet złożył pozew wzajemny w Kalifornii w 1993 roku, argumentując, że AT&T rozpowszechniało kod z Berkeley wewnątrz System V bez wymaganych przez licencję przypisań autorstwa.
Podstawa prawna sporu załamała się w 1993 roku. Sędzia Dickinson Debevoise odmówił USL wydania wstępnego nakazu sądowego, uznając, że roszczenia USL dotyczące praw autorskich do starszego kodu 32V są prawdopodobnie nieważne, ponieważ AT&T przez lata rozpowszechniało ten kod bez not o prawach autorskich. W połowie 1993 roku Novell wykupił USL od AT&T, a zarząd Novell chciał zakończenia sporu. Sprawę ugodzono w lutym 1994 roku. Z około 18 000 plików w dystrybucji Berkeley usunięto trzy, a około siedemdziesięciu opatrzono notami o prawach autorskich USL.
Berkeley wydało 4.4BSD-Lite w czerwcu 1994 roku i system ten był już prawnie czysty. FreeBSD oraz NetBSD, oba założone w 1993 roku na bazie spornego kodu Net/2, musiały przebudować swoje systemy na nowej podstawie, co zajęło większość pozostałej części 1994 roku. Linux 1.0 został wydany w marcu 1994 roku, w trakcie trwania tej przebudowy.
Dlaczego Linux zdominował rynek serwerowy, a nie BSD?
Proces sądowy to popularna odpowiedź i jest ona częścią prawdy. Między kwietniem 1992 a lutym 1994 roku każdy, kto wybierał darmowy system Unix do swojego produktu, musiał rozważyć realne roszczenia prawników AT&T w zestawieniu z jądrem od fińskiego studenta, wobec którego nikt nie mógł wysunąć pozwów. Był to dokładnie ten moment, w którym pojawiła się sieć WWW i pierwsze dystrybucje systemu Linux: Slackware w lipcu 1993, Debian w sierpniu 1993, a następnie Red Hat i SUSE. Red Hat przekuł tę przewagę w standard komercyjny, a ścieżka od Red Hat Linux do CentOS, a następnie do Rocky i AlmaLinux wyjaśnia, dlaczego dystrybucja założona w 1993 roku nadal decyduje o tym, co działa na ogromnej liczbie serwerów biznesowych.
Cztery inne czynniki miały równie duże znaczenie co sprawa sądowa.
- Sprzęt. Linux od pierwszej linii kodu był kierowany na popularne komputery PC z procesorem 386, czyli sprzęt, który stał się tani. Punktem ciężkości BSD były systemy VAX i stacje robocze, a port na architekturę 386 był zewnętrznym wysiłkiem zaledwie dwóch osób.
- Licencja. Licencja GPL wymaga, aby firma udostępniająca zmodyfikowane jądro opublikowała swoje zmiany, dzięki czemu praca dostawców wracała do jednego głównego drzewa kodu. Licencja BSD pozwala firmie zachować zmiany dla siebie, co też czyniono.
- Model rozwoju. Torvalds szybko scalał poprawki od osób z zewnątrz i stale wydawał nowe wersje. System 386BSD wydawano na tyle wolno, że jego użytkownicy w 1993 roku dwukrotnie go rozwidlili, tworząc NetBSD i FreeBSD, a w 1995 roku kolejny raz, tworząc OpenBSD.
- Impet. Programiści podążają tam, gdzie są już inni programiści, a sterowniki powstają dla systemu, który ma najwięcej użytkowników.
Należy uczciwie podejść do kwestii technicznej. W 1994 roku BSD było systemem bardziej kompletnym, posiadającym spójną bazę, udokumentowaną historię i kod sieciowy, który Linux musiał nadrabiać przez lata. W 1994 roku nikt nie wybierał systemu Linux dlatego, że był lepszy. Wybierano go, ponieważ był dostępny, nieobciążony prawnie, działał na posiadanym sprzęcie i rozwijał się z każdym tygodniem.
Co zachował system BSD i gdzie obecnie działa
System BSD przetrwał. Utracił jedynie pozycję domyślnego wyboru. Najlepszy dowód znajduje się na Twoim własnym komputerze: projekt OpenBSD stworzył OpenSSH w 1999 roku i jest to serwer SSH obecny w niemal każdym systemie Linux dostarczanym obecnie, dlatego nawyki dotyczące kluczy SSH, które warto poznać są identyczne w obu rodzinach systemów.
Netflix dostarcza wideo za pomocą urządzeń opartych na FreeBSD. Junos, system operacyjny routerów Juniper, bazuje na FreeBSD. Oprogramowanie systemowe konsoli PlayStation wywodzi się z FreeBSD. Systemy macOS oraz iOS firmy Apple zawierają kod BSD w jądrze oraz w przestrzeni użytkownika. Permisywna licencja, która kosztowała BSD udział w drzewie wspólnych serwerów, sprawiła, że kod BSD znalazł się w ogromnej liczbie urządzeń, które nigdy o tym nie wspominają.
Jeśli dokonujesz wyboru dzisiaj, pytanie ma charakter praktyczny, a nie historyczny. Porównanie systemów Linux i FreeBSD w roli serwera sprowadza się do ZFS, jails, drzewa ports oraz tego, w jakim stopniu oprogramowanie firm trzecich zakłada obecność systemu Linux. FreeBSD 15 jako serwer to aktualny, utrzymywany system, a nie eksponat muzealny. Z kolei Linux kontra Windows Server to osobne zagadnienie, którego odpowiedź zależy od stosowanego stosu technologicznego.
Projekt z 1969 roku używany dzisiaj na VPS
Każdy z tych elementów jest starszy niż większość osób, które z niego korzystają.
- Potok (pipe).
who | wc -lzlicza zalogowanych użytkowników, ponieważ Version 3 Unix w 1973 roku umożliwił przekierowanie wyjścia jednego programu na wejście drugiego. - Sekcje podręcznika.
man 1 lsorazman 5 crontabwykorzystują schemat numeracji z podręcznika z listopada 1971 roku. - Podział systemu plików.
/usristnieje, ponieważ dysk główny w tamtym PDP-11 zapełnił się w 1971 roku, a programiści przenieśli pliki na drugi pakiet dyskowy. Dystrybucje od tego czasu wycofały się z tego podziału: uruchomieniels -ld /binw Ubuntu 24.04 lub Debian 13 skutkuje utworzeniem dowiązania symbolicznego dousr/bin. - Wywołania gniazd (socket calls). Berkeley opracowało je dla 4.2BSD w 1983 roku i każdy demon sieciowy nadal z nich korzysta.
- POSIX. Skrypt
#!/bin/shnapisany zgodnie z tym standardem działa bez zmian na Linux, FreeBSD, macOS oraz Solaris, ponieważ standard ten został zaimplementowany przez wszystkie te systemy.
Jeden spadek nie przetrwał próby czasu: sekwencja startowa skryptów powłoki, którą Linux przejął z System V, zniknęła już z niemal każdej dystrybucji, a argumentacja, która zastąpiła ją systemd, stanowi najświeższy spór o to, czym powinien być system typu Unix.
Wynajmując wirtualny serwer prywatny i logując się do niego, wpisujesz polecenia w interfejsie zaprojektowanym dla maszyny z 24 KB pamięci i działem patentowym do obsługi. Przetrwał on, ponieważ interfejs został opublikowany, poddany dyskusji, ustandaryzowany, a następnie zaimplementowany od zera przez osoby, które nigdy nie miały wglądu w oryginalny kod.
FAQ
Czy Linux zawiera oryginalny kod Unix?
Nie. Linus Torvalds napisał jądro od zera, rozpoczynając w 1991 roku i celując w interfejsy POSIX, a nie w kod źródłowy AT&T. Dziedzictwo Unix to projekt i opublikowany interfejs: pliki, procesy, potoki oraz nazwy wywołań systemowych. Narzędzia GNU wokół jądra również zostały napisane od zera, począwszy od 1983 roku. Ta niezależność jest powodem, dla którego spór prawny AT&T dotyczący kodu BSD w ogóle nie dotyczył systemu Linux.
Kiedy miał miejsce pozew AT&T przeciwko BSD i czy doprowadził on do upadku BSD?
USL, spółka zależna AT&T będąca właścicielem Unix, pozwała BSDi w kwietniu 1992 roku, a później dołączyła University of California jako pozwanego. W 1993 roku sędzia odrzucił wniosek o wstępny nakaz sądowy, uznając, że roszczenie o prawa autorskie do starszego kodu 32V jest prawdopodobnie nieważne. Novell kupił USL w połowie 1993 roku i zakończył sprawę ugodą w lutym 1994 roku, usuwając trzy pliki z około 18 000 i nadając około siedemdziesięciu nowe noty o prawach autorskich. Nie zabiło to BSD. Zamroziło to jednak adopcję BSD na dwa lata, w czasie gdy świat wybierał darmowy system Unix.
Dlaczego Linux przejął serwery zamiast BSD?
Pewność prawna była jednym z powodów: w latach 1992 i 1993 Linux nie był objęty żadnym pozwem, podczas gdy BSD tak. Inne powody to architektura 386 jako cel od pierwszego dnia, licencja GPL wymuszająca zwrot zmian od dostawców do jednego drzewa kodu oraz proces scalania zmian wystarczająco szybki, by utrzymać zainteresowanie współtwórców, podczas gdy 386BSD rozwidliło się na trzy strony. Zalety techniczne nie były czynnikiem decydującym, ponieważ w 1994 roku to BSD było bardziej kompletnym systemem.
Czy warto dzisiaj korzystać z FreeBSD?
Tak, z konkretnych powodów: ZFS zintegrowany z systemem bazowym, jails jako dojrzały model izolacji, system bazowy rozwijany jako jedna spójna jednostka oraz dokumentacja, która pozostaje aktualna. Kosztem jest praca nad kompatybilnością, ponieważ większość oprogramowania serwerowego firm trzecich, narzędzi kontenerowych i wsparcia dostawców zakłada środowisko Linux. Wybierz FreeBSD, gdy jego możliwości w zakresie pamięci masowej i sieci uzasadniają ten koszt, a nie z powodu lojalności wobec starszej linii rozwojowej.