Historia systemów Unix i Linux: od 1969 roku do dzisiaj
Poznaj historię powstania systemów Unix i Linux. Wyjaśniamy rolę Bell Labs, wpływ ugody AT&T, spór o kod BSD oraz przyczyny, dla których Linux zdominował nowoczesne serwery.
Krótka historia systemów Unix i Linux
Historia systemów Unix i Linux to długi spór o prawo do własności kodu źródłowego. System Unix powstał w Bell Labs w 1969 roku. System Linux powstał w Helsinkach w 1991 roku i nie współdzieli żadnego fragmentu oryginalnego kodu. Elementem wspólnym jest projekt oraz zestaw opublikowanych interfejsów: pliki, procesy, potoki oraz powłoka (shell), która łączy małe programy w całość. System Unix rozpowszechnił się na uczelniach w latach 70., 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. System 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 trafił do Twojej szafy serwerowej.
1969: zapasowy PDP-7 i koncepcje, 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 uznano go za zbyt złożony do ukończenia. 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ć fundusze 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 sprawił, że pierwszy podręcznik Unix, datowany na listopad 1971 roku, był zbiorem sformatowanych dokumentów i to właśnie dlatego do dziś wpisuje się man 5 crontab. Numery sekcji w tamtym podręczniku odpowiadają numerom sekcji w obecnych dokumentacjach.
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, wydana później w 1973 roku, została przepisana w języku C. System operacyjny napisany w przenośnym języku może działać na sprzęcie, dla którego nie został pierwotnie stworzony; dlatego Unix przetrwał każdą maszynę, na której się narodził.
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 i w zamian zaakceptowało ograniczenie: firma miała pozostać poza branżami innymi niż telekomunikacja. Oprogramowanie było jedną z takich branż. 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 linijka po linijce i prowadził na jego podstawie zajęcia. Całe pokolenie nauczyło się działania systemu operacyjnego, analizując rzeczywisty system.
Następnie licencja uległa zmianie. Licencja Seventh Edition z 1979 roku zabraniała wykorzystywania 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 stanowiło ulepszenie 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 był autorem znacznej części wczesnych prac: 1BSD w 1978 roku, a następnie 2BSD w 1979 roku, w którym wprowadzono edytor vi oraz powłokę C shell.
Powłoka C shell jest źródłem mechanizmów !! oraz !$. Bash przejął tę składnię, co jest powodem, dla którego rozwijanie historii w bash wciąż zaskakuje użytkowników wpisujących wykrzyknik wewnątrz podwójnego cudzysłowu ponad czterdzieści lat później.
Następnie DARPA (amerykańska agencja Defense Advanced Research Projects Agency) opłaciła Berkeley za zaimplementowanie nowych protokołów internetowych w systemie Unix. Wersja 4.2BSD, wydana w sierpniu 1983 roku, zawierała stos TCP/IP (transmission control protocol over internet protocol) oraz interfejs programowania aplikacji socket. Każda usługa sieciowa na Twoim serwerze nadal wywołuje socket(), bind(), listen() oraz accept() w tej właśnie kolejności, ponieważ to Berkeley wybrało te nazwy w 1983 roku.
Jeden szczegół zadecydował o kolejnej dekadzie. 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. Berkeley przez kilka lat zastępowało części pochodzące od AT&T własnym kodem, plik po pliku. Pytanie, czy to zastąpienie było w pełni kompletne, stało się później przedmiotem rozprawy sądowej.
1984: rozpad i wojny systemów Unix
System Bell został rozwiązany 1 stycznia 1984 roku, a wraz z nim wygasł dekret o zgodzie, który uniemożliwiał AT&T prowadzenie działalności w branży 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 zdążyli już stworzyć własne forki 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 standaryzacyjne: Open Software Foundation oraz Unix International. Przez lata dostarczano niekompatybilne systemy, spierając się o to, który Unix jest tym właściwym.
Z tego chaosu wyłonił się POSIX (portable operating system interface). Standard IEEE 1003.1 opublikowano w 1988 roku; określał on wymagania dla systemu 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 pewien student napisał jądro systemu w oparciu o te dokumenty.
Minix i luka, którą po sobie 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 uruchamiał się on na tanich komputerach PC posiadanych przez studentów. Korzystanie z niego w celach dydaktycznych było legalne, w przeciwieństwie do Seventh Edition Unix.
Minix celowo pozostał niewielki, ponieważ musiał być zrozumiały w ramach podręcznika, a Tanenbaum odrzucał poprawki, które uczyniłyby z niego system produkcyjny. Licencja również nie była wolna: należało kupić książkę, a redystrybucja zmodyfikowanego systemu Minix nie zależała od użytkownika. W rezultacie do 1991 roku student mógł zapoznać się z działającym jądrem typu Unix, ale nie mógł zbudować na nim nic trwałego.
GNU posiadało wszystko poza jądrem
Richard Stallman ogłosił projekt GNU we wrześniu 1983 roku, dążąc do stworzenia kompletnego, wolnego systemu typu Unix. Do 1991 roku GNU wyprodukowało większość komponentów otaczających jądro: kompilator GCC, bibliotekę GNU C, narzędzia binarne oraz bash, powłokę napisaną przez Briana Foxa w 1989 roku, w której serwer nadal uruchamia sesję użytkownika. Jądro GNU, Hurd, było elementem, którego ukończenie stale się opóźniało.
Licencja GNU General Public License w wersji 2 została opublikowana w czerwcu 1991 roku. Jej zasada jest krótka. Kod można wykorzystywać i modyfikować, a w przypadku dystrybucji rezultatu należy 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 w oparciu o interfejsy POSIX i połączone z istniejącymi już narzędziami GNU. W styczniu 1992 roku Tanenbaum stwierdził w rozmowie z Torvaldsem, że monolityczne jądro 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 wspierających, które pojawiły się później. 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ółdzielonego drzewa kodu.
Pozew: 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 wydali 386BSD 0.0 w marcu 1992 roku, a następnie 386BSD 0.1 w dniu 14 lipca 1992 roku. Wolny, kompletny i dojrzały system BSD dla architektury 386 istniał w tym samym momencie, w którym Linux był jeszcze 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 w sądzie federalnym w New Jersey w związku z tajemnicami handlowymi oraz znakiem towarowym 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 rozprowadzało kod Berkeley wewnątrz System V bez wymaganych przez własną 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 roszczenie USL dotyczące praw autorskich do starszego kodu 32V jest prawdopodobnie nieważne, ponieważ AT&T rozprowadzało ten kod przez lata bez not o prawach autorskich. Novell kupił USL od AT&T w połowie 1993 roku, a zarząd Novell chciał zakończenia sporu. Sprawa zakończyła się ugodą w lutym 1994 roku. Z około 18 000 plików w dystrybucji Berkeley, trzy zostały usunięte, a około siedemdziesiąt otrzymało noty o prawach autorskich USL.
Berkeley wydało 4.4BSD-Lite w czerwcu 1994 roku i system ten był prawnie czysty. FreeBSD oraz NetBSD, oba założone w 1993 roku na bazie spornego kodu Net/2, musiały następnie 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?
Sprawa sądowa to popularna odpowiedź i jest ona częścią prawdy. Między kwietniem 1992 a lutym 1994 roku każdy, kto wybierał darmowy system Unix dla swojego produktu, musiał rozważyć realne roszczenia prawne ze strony AT&T w zestawieniu z jądrem stworzonym przez 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.
Cztery inne czynniki miały równie duże znaczenie co proces sądowy.
- Sprzęt. Linux od pierwszej linii kodu był projektowany z myślą o tanich komputerach klasy 386 PC, a to właśnie ten sprzęt stał się powszechnie dostępny. Punktem ciężkości BSD były systemy VAX oraz stacje robocze, a port na architekturę 386 był zewnętrznym wysiłkiem zaledwie dwóch osób.
- Licencja. Licencja GPL wymaga, aby firma dostarczająca zmodyfikowane jądro publikowała swoje zmiany, dzięki czemu praca dostawców wracała do głównego drzewa kodu. Licencja BSD pozwala firmom na zachowanie zmian w tajemnicy, co też było praktykowane.
- Model rozwoju. Torvalds szybko scalał poprawki od zewnętrznych programistów i stale wydawał nowe wersje. System 386BSD wydawał aktualizacje na tyle wolno, że jego własna społeczność w 1993 roku rozwidliła go dwukrotnie, tworząc NetBSD i FreeBSD, a w 1995 roku ponownie, tworząc OpenBSD.
- Dynamika rozwoju. 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ę oraz kod sieciowy, którego dogonienie zajęło Linuxowi lata. Nikt nie wybierał systemu Linux w 1994 roku dlatego, że był lepszy. Wybierano go, ponieważ był dostępny, nieobciążony roszczeniami, działał na posiadanym sprzęcie i rozwijał się z każdym tygodniem.
Co zachował system BSD i gdzie jest obecnie uruchamiany
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 na rynek. Dlatego właśnie nawyki dotyczące kluczy SSH, które warto znać 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 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 technologii ZFS, mechanizmu jails, drzewa portów 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, którego używasz dzisiaj na VPS
Każdy z tych elementów jest starszy niż większość osób, które z nich 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: uruchomls -ld /binna Ubuntu 24.04 lub Debian 13, a otrzymasz dowiązanie symboliczne 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.
Gdy wynajmujesz wirtualny serwer prywatny i logujesz 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 podstaw, zaczynając w 1991 roku, 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 podstaw, począwszy od 1983 roku. Ta niezależność jest powodem, dla którego spór prawny AT&T dotyczący kodu BSD nigdy 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 doprowadziło to do upadku BSD. Spowodowało to jednak zamrożenie adopcji BSD w ciągu dwóch lat, w których ś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 wprowadzonych przez dostawców do jednego drzewa oraz proces scalania zmian wystarczająco szybki, aby 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 całość 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.