Linux stanowi jedną z wersji systemu operacyjnego należącego do rodziny systemów uniksowych. Nazwa ta również jest używana dla określania całego systemu, który funkcjonuje w oparciu o jądro (niektórzy, np. projekt GNU czy Debian, korzystają w tym celu z określenia GNU/Linux).

  • Historia

Jądro systemu operacyjnego Linux zostało stworzone przez fińskiego programistę, Linusa Torvaldsa w 1991 roku, z przeznaczeniem dla pracy z procesorami rodziny 80386 firmy Intel.

Opublikowane przez twórcę systemu informacje, znajdujące się na internetowej liście dyskusyjnej, w dużej mierze zainteresowały potencjalnych użytkowników, dlatego też niedługo później nad rozwojem tego systemu pracowała już spora grupa ludzi. Fakt ten znacznie przyspieszył rozwój systemu, który w niedługim czasie został nazwany Linuxem. Wraz ze wzrostem jego popularności, rosła również liczba osób wspierających jego rozwój, który to proces trwa nieustannie do dzisiaj, a liczba użytkowników jego różnych dystrybucji szacowana jest obecnie na kilka milionów.

Następujące po sobie wersje jądra Linuxa przynosiły ze sobą wiele zmian, a mianowicie:

  • jądro 1.0 (14.03.1994) - było pierwszym stabilnym jądrem Linuksa, w którym znajdowała się (wzorowana na systemie BSD) implementacja internetowych protokołów; został do niego również dołączony nowy system plików ext, likwidujący wiele utrudnień z systemu plików Minixa
  • jądro 1.2 (06.03.1995) - ta wersja systemu obsługiwała już 4 następujące platformy: → Alpha

→ Sparc

→ MIPS

→ i386

oraz umożliwiała korzystanie z nowej szyny PCI; została również zwiększona liczba obsługiwanych urządzeń

  • jądro 2.0 (08.06.1996) - ta wersja jądra została wzbogacona o obsługę wielu procesorów (w trybie SMP), brakowało w niej jednak możliwości obsługi wielobieżności; zwiększono tu również poziom wydajności stosu TCP/IP oraz wprowadzono możliwość obsługiwania: protokołów Appletalk, amatorskich sieci radiowych AX.25 i standardu ISDN; umożliwiono tutaj również montowanie sieciowych systemów plików Netware i SMB
  • jądro 2.2 (25.01.1999) - w wersji tej umożliwiono obsługę następnych architektur sprzętowych - IBM S/390, ARM czy Sparc64 oraz przeprojektowano realizację protokołu TCP/IP, wprowadzono również możliwość zaawansowanego routingu
  • jądro 2.4 (04.01.2001) - w tej wersji dołożono obsługę procesorów IBM S/390 (wersja 64 - bitowa) i Intel Itanium, HP PA-RISC, CRIS oraz Hitachi SH, zostały również usunięte następujące ograniczenia pochodzące z poprzednich wersji Linuxa: większy niż 2 GB rozmiar plików oraz pełną 64-bitowość; nastąpiło udoskonalenie obsługi USB i szybkich dysków SCSI i ATA66 oraz dodanie obsługi złączy Firewire i kamer cyfrowych jak również możliwość korzystania z XFS i DevFS. Wersja ta również zawierała prosty serwer HTTP (kHTTPd) i obsługę LVM (polegająca na łączeniu kilku twardych dysków w jednej wirtualnej partycji)
  • jądro 2.6 (18.12.2003) - została wprowadzona obsługa architektur H8/300, IBM POWER5, v850 i x86-64, a liczba wszystkich obsługiwanych architektur wzrosła tutaj aż do 22; została dołożona obsługa protokołu IPSec i został zmieniony scheduler (przez Ingo Molnara); prace prowadzone nad tym jądrem prowadziły do zwiększenia skalowalności oraz szybkości systemu, jak również zmniejszenia opóźnień; dodano także obsługę wspólnego API dla algorytmów kryptograficznych oraz obsługę wielobieżności, znacznie zostało również ułatwione tworzenie nowych modułów jądra; została dodana obsługa systemów plików ReiserFS i IBM JFS, rozbudowie o obsługę list kontroli dostępu (zgodnych ze specyfikacją POSIX) uległy rodzime systemy plików, usunięto uznany za zbędny, serwer kHTTPd
    • Etymologia nazwy

Nazwa Linux stanowi kombinację słów "Linus" (imię autora systemu) oraz "Unix". początkowo Torvalds zaproponował nazwę "Freax" (free + freak + [uni]X), która się jednak nie przyjęła. Funkcjonujące określenie "Linux" zawiera w sobie również informację, iż nie jest systemem Unix (Linux Is Not UniX). Według innych źródeł, nazwa Linux wzięła się z połączenia słów "Linus" i "Minix" albo "Linus" i "Unix", jednak jak było naprawdę, może wyjaśnić tylko sam twórca systemu.

W języku polskim, używając nazwy "Linux" w przypadku innym niż mianownik, spolszczamy ją następująco: Minownik: Linux ("Linuks"), Dopełniacz: Linuksa, Celownik: Linuksowi, Biernik: Linuksa, Narzędnik: Linuksem, Miejscownik: Linuksie, Wołacz: Linuksie!

  • Cechy systemu

System operacyjny Linux wykazuje dużą zgodność ze standardami ANSI oraz POSIX, ponadto jest: wielowątkowy, wielozadaniowy, wielobieżny, posiada budowę monolityczną (jednak z obsługą modułów często zawierających sterowniki urządzeń) oraz wsparcie dla klastrów (projekt akademicki MOSIX z Izraela) i architektury SMP (w wersjach najnowszych również dla NUMA). Linux jest wysoce wydajnym, stabilnym i bezpiecznym systemem, a jego jedyną wadą może być fakt braku możliwości wywłaszczenia procesów jądra (która istnieje tylko w jądrach najnowszych 2.6) oraz mały stopień wykorzystania wątków jądra, które nie zajmuje się wykonywaniem programów użytkownika. Linux może działać na wielu różnych platformach sprzętowych:

  • AMD (K5/K6/Duron/Athlon/Sempron/Athlon-FX) i inne, zgodne z pierwotną architekturą
  • Athlon_64 AMD - Opteron, Athlon 64 i Intel EMT
  • IA-32 - 32-bitowe procesory firmy Intel z rodziny x86 (386SX/DX-486SX/DX-Pentium/I/II/III/IV/EE/Pro/Xeon i lepsze)
  • IA-64 - procesory Intel z rodziny Itanium oraz 64-bitowe wersje procesora Xeon
  • IBM PowerPC - IBM PCs i Apple Mac (IBM Power1 - IBM Power5)
  • m68k firmy Motorola (Atari, Amiga i Apple)
  • Mainframe - IBM CP S/390 oraz IBM CP zSeries
  • Alpha
  • MIPS
  • Sparc
  • Sparc64 i inne

Linux, dzięki wykorzystaniu Wirtualnego Systemu Plików (VFS) może obsługiwać niemal 50 różnych systemów plików, jak na przykład:

  • FAT
  • IBM JFS
  • NFS
  • NTFS - w trybie tylko do odczytu z częściową obsługą zapisu (jądro 2.6 posiada już obsługę zapisu na dyskach)
  • Reiser4
  • ReiserFS
  • rodzime ext2 oraz ext3
  • SGI XFS
  • SMB
  • system plików systemu Minix
  • UFS - UFS2 - w trybie tylko do odczytu
    • Zastosowanie

Linux ma swoje zastosowanie przede wszystkim w systemach serwerowych (www, ftp, e-mail itd.) jako zapory sieciowe (firewall) i w systemach osadzonych. W uwagi na łatwą dystrybucję instalacji, jego graficzny wygląd oraz bogactwo wydajnego oprogramowania, Linux ma duże szanse przebić się na szeroki rynek domowy i biurowy. Linux jest obecnie wdrażany do komputerów administracji państwowej wielu państw europejskich, jest również wykorzystywany przez kontrwywiad i agencje wywiadowcze, co podyktowane jest bezpieczeństwem, stabilnością oraz możliwością audytu i modyfikacji kodu (ze względu na dostępność jego kodu źródłowego). System ten wdrażany jest również do systemów bankowości oraz innych instytucji finansowych, które chwalą sobie jego niezawodność (system notowań Wall Street).

  • Schemat rozwoju

Rozwój systemu linuksowego dzieli się na dwie następujące gałęzie:

  • stabilna, oznaczona parzystymi numerami serii (np. 2.6)
  • rozwojowa,oznaczona nieparzystymi numerami (np. 2.5)

Celem wersji stabilnej jest (jak nazwa wskazuje) jej stabilność, a więc jej twórcy nie wprowadzają do niej żadnych rewolucyjnych zmian, a jedynie zmiany w formie poprawek błędów lub niewielkich usprawnień (przykładem poważnego odstępstwa od tej zasady była wymiana nieskutecznego podsystemu wirtualnej pamięci dokonana w serii 2.4).

Wszystkie wersje stabilne są przeplatane wersjami rozwojowymi z charakterystycznymi dla nich eksperymentami, przebudową itp., przez co nie mogą one służyć normalnemu użytkowaniu (często nie są nawet skompilowane). Seria rozwojowa potrzebuje więc chwilę czasu, by stała się pierwszą wersją należącą do serii stabilnej, podczas gdy poprzednia seria stabilna przechodzi w stan spoczynku (wprowadzane są jedynie zmiany w formie poprawy bezpieczeństwa czy portów fragmentu kodu z nowszej serii). Seria 2.6 Linus uzyskała (za zgodą jej opiekuna Andrew Mortona) model dość znacznych, lecz wprowadzanych stopniowo modyfikacji w ramach wersji stabilnej. Zmiany, w sytuacji zaakceptowania ich przez Torvaldsa oraz po upływie okresu niezbędnych testów, włączane są do głównej serii nadzorowanej przez Mortona. Z uwagi na to, iż aktualny model pracy nie sprawia problemów, nie utworzono jak dotąd gałęzi 2.7, na co kolejnym argumentem może być fakt, iż rzeczywista stabilizacja jądra kierowana do końcowych użytkowników systemu odbywa się od dłuższego czasu w ramach danej dystrybucji.

  • Numeracja jąder

Poszczególne wersje Linuksa zapisywane są za pomocą 3 liczb rozdzielonych kropką, np.

2.4.17, gdzie liczba 2 oznacza numer wydania, następnie 4 określa serię (liczba parzysta oznacza serię stabilną, nieparzysta - rozwojową), natomiast liczba 17 stanowi numer wersji w obrębie danej serii. Zdarzają się również oznaczenia takie jak: 2.4.18-pre6, które czytać należy jako szóstą przymiarkę do wydania 2.4.18.

Do poszczególnych wersji systemu dobierane są przez ich koordynatorów łaty (patche), które jednak okazują się niewystarczające dla wielu użytkowników, przez co tworzą oni własne gałęzie jądra, gdzie sami decydują, jakie łaty zostaną wprowadzone czy też odrzucone. Działania takie znacząco wpływają na kierunek oraz tempo rozwoju systemu. Poszczególne oficjalne gałęzie Linuxa są zarządzane przez Linusa Torvaldsa lub osoby przez niego wyznaczone:

  • jądro 2.0 jest zarządzane przez Davida Weinehalla
  • jądro 2.2 - przez Marca Christiana Petersena (wcześniej przez Alana Coxa)
  • jądro 2.4 - przez Marcelo Tosatti
  • jądro 2.6 - przez Andrew Mortona

Istnieją również równoległe, nieoficjalne serie (np. jądro 2.4 Alana Coksa), które są oznaczane przez odpowiednią końcówkę (np. "-ac" przy wersji Alana Coksa). Należy tutaj zaznaczyć, iż zdarzają się "nieoficjalne" jądra, które sprawują się znacznie lepiej niż zarządzane przez Linusa.

Występują również oznaczenia typu 2.4.18-rc1, które oznaczają tzw. wydanie kandydujące (release candidate); jest to więc "kandydat" na nową wersję stabilną, który się nią stanie, jeśli nie będzie zawierał jakichś poważniejszych błędów. W przypadku braku wykrycia błędów, nowa wersja stabilna, oprócz nazwy, niczym się nie będzie różnić od wersji, na której postawie została ona utworzona. W przypadku odkrycia błędów, zostają one poprawione, co stanowi już kolejną nową wersję "kandydującą" przez co cały proces się powtarza. Wersje typu "-rc" mają z reguły miejsce po wydaniu kilku wersji "-pre".

Od czasu, gdy wszelkie zmiany dokonywane w kodzie jądra są przechowywane w repozytorium BitKeeper, są również dostępne na stronach projektu wersje typu 2.6.11-rc1-bk8, stanowiące tzw. snapshoty. Są to wersje, które zawierają kod wprowadzony w czasie od momentu wydania tej wersji (w tym przypadku - 2.6.11-rc1), tworzone automatycznie jako patche, nakładane na kod jądra. Aktualnie najnowszą wersję jądra stanowi wersja 2.6.10.

  • Oprogramowanie

Linux obsługuje programy w formacie a.out i ELF, a przez zaznaczenie przy kompilacji opcji Kernel support for MISC binaries, uruchamia również inne programy, jak np. Java przez maszynę wirtualną lub MS-DOS czy też MS Windows przez emulatory. Oprogramowanie Linuksa zazwyczaj jest wolne i otwarte, rozprowadzane jako gotowe pakiety binarne przeznaczone dla określonej dystrybucji (np. DEB, RPM, TGZ) czy jako źródła wymagające kompilacji (np. tar.gz, tar.bz2).

  • Prawne aspekty

Linux jest systemem wolnodostępnym, który jest rozprowadzany na licencji GNU (General Public Licence). Oznacza to, iż jego kod źródłowy jest dostępny dla każdego, przez co można go w dowolny sposób modyfikować - gałąź oficjalna nie zawiera żadnych zamkniętych kodów (jest to możliwe w przypadku jąder modułów komercyjnych). Moduły Linuksa posiadają automatycznie oznaczane licencje, co ma zapobiegać ewentualnemu włączeniu modułu na licencji niezgodnej z GPL (licencjami zgodnymi są np. GPL czy LGPL). Linux stanowi zastrzeżony znak towarowy, który należy do jego twórcy, czyli Linusa Torvaldsa.