Linux
nowoczesny system operacyjny wzorowany na Uniksie
historia (Unix, BSD, AIX, System V, System V Release 4, Minix, Linux)
stały, dynamiczny rozwój
szeroka gama zastosowań
Wolne oprogramowanie
wolne oprogramowanie (free software)
oprogramowanie otwartych źródeł (open source)
Linux na licencji GNU General Public License (GPL) opracowanej przez Free Software Foundation (FSF)
Richard M. Stallman – projekt GNU (GNU’s Not Unix)
GPL kontra EULA (End User License Agreement): prawo swobodnego korzystania z oprogramowania kontra zgoda na ograniczenia w dostępie i wykorzystaniu oprogramowania narzucone przez producenta
GPLv2 (starsza wersja licencji)
GPLv3 (07/2007)
precyzyjniejszy język odnośnie patentowania oprogramowania, zgodności z innymi wolnymi licencjami, uniemożliwienie tiwoizacji sprzętu (Tivoization problem), uniemożliwienie pobierania opłat za oferowanie wolnego oprogramowania (używanie systemu operacyjnego GNU/Linux w systemie operacyjnym Microsoft Windows)
oprogramowanie public-domain nie jest tożsame z oprogramowaniem GPL
jądro Linuksa jest udostępniane w oparciu o GPLv2
licencja BSD: wolne oprogramowanie może być używane w komercyjnych produktach
producent komercyjnego oprogramowania wykorzystał fragment kody na licencji GPL
usunąć kod GPL i zastąpić go własnym
uzyskać od autora kodu prawo używania go (ew. ponosząc opłaty licencyjne)
udostępnić całe oprogramowanie na licencji GPL
kryteria wolnego (otwartego oprogramowania) wg FSF (tzw. 4 wolności)
A program is free software if the program’s users have the four essential freedoms (https://www.gnu.org/philosophy/free-sw.en.html):
The freedom to run the program as you wish, for any purpose (freedom 0).
The freedom to study how the program works, and change it so it does your computing as you wish (freedom 1). Access to the source code is a precondition for this.
The freedom to redistribute copies so you can help your neighbor (freedom 2).
The freedom to distribute copies of your modified versions to others (freedom 3). By doing this you can give the whole community a chance to benefit from your changes. Access to the source code is a precondition for this.
A program is free software if it gives users adequately all of these freedoms. Otherwise, it is nonfree. While we can distinguish various nonfree distribution schemes in terms of how far they fall short of being free, we consider them all equally unethical.
Linux – jądro systemu operacyjnego
System operacyjny jest programem, który działa jako pośrednik między użytkownikiem komputera a sprzętem komputerowym. Zadaniem systemu operacyjnego jest tworzenie środowiska, w którym użytkownik może wykonywać programy.
System operacyjny nadzoruje i koordynuje posługiwanie się sprzętem przez różne programy użytkowe, które pracują na zlecenie różnych użytkowników.
System operacyjny jest odpowiedzialny za zarządzanie zasobami komputera i tworzenie wirtualnej maszyny (dla programisty)
Jądro (kernel) jest tą częścią systemu operacyjnego, która działa w komputerze nieustannie. Wszystkie pozostałe programy są programami użytkowymi.
Rodzaje wersji jądra systemu operacyjnego Linux (https://www.kernel.org/category/releases.html):
Prepatch
Prepatch or “RC” kernels are mainline kernel pre-releases that are mostly aimed at other kernel developers and Linux enthusiasts. They must be compiled from source and usually contain new features that must be tested before they can be put into a stable release. Prepatch kernels are maintained and released by Linus Torvalds.
Mainline
Mainline tree is maintained by Linus Torvalds. It’s the tree where all new features are introduced and where all the exciting new development happens. New mainline kernels are released every 2-3 months.
Stable
After each mainline kernel is released, it is considered “stable.” Any bug fixes for a stable kernel are backported from the mainline tree and applied by a designated stable kernel maintainer. There are usually only a few bugfix kernel releases until next mainline kernel becomes available – unless it is designated a “longterm maintenance kernel.” Stable kernel updates are released on as-needed basis, usually 2-3 a month.
Longterm
There are usually several “longterm maintenance” kernel releases provided for the purposes of backporting bugfixes for older kernel trees. Only important bugfixes are applied to such kernels and they don’t usually see very frequent releases, especially for older trees.
21.07.2011 Linus Torvalds oficjalnie udostępnił wersję 2.6.40, która pojawiła się z numerem 3.0, żeby uprościć schemat numerowania. Wersje stabilne przyjmują mumery 3.0.0, 3.0.2, …, a rozwojowe – 3.1.1-rc1, … (https://kernelnewbies.org/LinuxVersions).
Zob.: https://www.kernel.org
mainline: 6.6-rc4 2023-10-01 [tarball] [patch] [inc. patch] [view diff] [browse]
stable: 6.5.5 2023-09-23 [tarball] [pgp] [patch] [inc. patch] {view diff] [browse] [changelog]
stable: 6.4.16 [EOL] 2023-09-13 [tarball] [pgp] [patch] [inc. patch] [view diff] [browse] [changelog]
longterm: 6.1.55 2023-09-23 [tarball] [pgp] [patch] [inc. patch] [view diff] [browse] [changelog]
longterm: 5.15.133 2023-09-23 [tarball] [pgp] [patch] [inc. patch] [view diff] [browse] [changelog]
longterm: 5.10.197 2023-09-23 [tarball] [pgp] [patch] [inc. patch] [view diff] [browse] [changelog]
longterm: 5.4.257 2023-09-23 [tarball] [pgp] [patch] [inc. patch] [view diff] [browse] [changelog]
longterm: 4.19.295 2023-09-23 [tarball] [pgp] [patch] [inc. patch] [view diff] [browse] [changelog]
longterm: 4.14.326 2023-09-23 [tarball] [pgp] [patch] [inc. patch] [view diff] [browse] [changelog]
linux-next: next-20231004 2023-10-04 [browse]
# wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.4.46.tar.xz
# tar [tx]Jvf linux-4.4.46.tar.xz
Jak sprawdzić wersję jądra dystrybucyjnego?
# cat /etc/system-release
Fedora release 36 (Thirty Six)
# uname -r
6.2.15-100.fc36.x86_64
# cat /etc/system-release
CentOS Linux release 7.9.2009 (Core)
# uname -r
3.10.0-1160.83.1.el7.x86_64
Jądra dystrybucyjne powstają przez modyfikowanie oryginalnego jądra (vanilla kernel source) w celu dodania obsługi dodatkowych urządzeń, zmianie domyślnych parametrów pracy jądra, itp.
Jądro Linuksa ma strukturę monolityczną, ale budowę modułową. M.in. oprogramowanie do obsługi urządzeń lub różnych systemów plików jest umieszczane (po skompilowaniu) w odrębnych plikach (modułach, plikach .ko), które mogą być dynamicznie ładowane lub wyładowywane z jądra.
# lsmod
...
mmc_core 139264 1 rtsx_pci_sdmmc
i2c_algo_bit 16384 1 i915
drm_kms_helper 151552 1 i915
e1000e 249856 0
drm 344064 21 i915,drm_kms_helper
crc32c_intel 24576 0
serio_raw 16384 0
rtsx_pci 57344 2 rtsx_pci_sdmmc,rtsx_pci_ms
...
# modprobe -r e1000e
# modprobe e1000e
Co zawiera plik /etc/system-release-cpe? Zob. https://nvd.nist.gov/cpe.cfm, https://cpe.mitre.org/specification/.
Cechy systemu GNU/Linux
monolityczny 32/64-bitowy system dla większość procesorów (SMP, NUMA)
wielozadaniowość z wywłaszczaniem, planista CFS
system wieloużytkownikowy
tekstowy i graficzny interfejs użytkownika (CLI i GUI)
obsługa największej liczby urządzeń spośród wszystkich SO
systemowa ochrona programów i danych
hierarchiczna struktura plików
obsługa wielu systemów plików: EXT3/EXT4, XFS, JFS, BTRFS, NTFS, VFAT
wsparcie dla wirtualizacji systemów operacyjnych (KVM, QEMU, XEN)
wsparcie dla tworzenia sieci komputerowych (IPv4/IPv6), sieciowe systemy plików
możliwość uruchamiania rozmaitych usług sieciowych: webowych (Apache), pocztowych (sendmail, postfix), plikowych (NFS, Samba), druku (LPD, CUPS), bazodanowych (MariaDB, PostgreSQL), etc.
wysoki poziom bezpieczeństwa (różne formy utwardzania systemu)
na poziomie kodu źródłowego zgodny z POSIX, SystemV i BSD (możliwość wykorzystania oprogramowania tworzonego dla innych Uniksów)
możliwość tworzenie osadzonych wersji systemu
GNU/Linux jest dojrzałym, niezawodnym, wydajnym i skalowalnym systemem operacyjnym.