Wprowadzenie

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

  • problem:

    producent komercyjnego oprogramowania wykorzystał fragment kody na licencji GPL

    rozwiązanie:
    • 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.