Pokazywanie postów oznaczonych etykietą kernel. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą kernel. Pokaż wszystkie posty

niedziela, 19 września 2021

Co można zmienić przez 30 lat?

Jak przypomina rosyjski Opennet, minęło 30 lat od utworzenia pierwszego publicznego wydania jądra Linuksa. Jądro 0.01 było skompresowane do 62 KB, zawierało 88 plików i zawierało 10239 linii kodu źródłowego. Według Linusa Torvaldsa to właśnie moment publikacji jądra 0.01 jest prawdziwą datą 30-lecia projektu .


25 sierpnia 1991 roku, po pięciu miesiącach rozwoju, 21-letni student Linus Torvalds ogłosił na telekonferencji comp.os.minix, że pracuje nad działającym prototypem nowego systemu operacyjnego Linux. Pierwsze publiczne wydanie jądra Linuksa zostało wydane 17 września 1991 roku.


Dynamika wzrostu bazy kodu (liczba linii kodu źródłowego) jądra:

  • 0.0.1 - wrzesień 1991, 10 tysięcy linii kodu;

  • 1.0.0 - marzec 1994, 176 tys. linii kodu;

  • 1.2.0 - marzec 1995, 311 tysięcy linii kodu;

  • 2.0.0 - czerwiec 1996, 778 tys. linii kodu;

  • 2.2.0 - styczeń 1999, 1,8 miliona linii kodu;

  • 2.4.0 - styczeń 2001, 3,4 miliona linii kodu;

  • 2.6.0 - grudzień 2003, 5,9 miliona linii kodu;

  • 2.6.28 - grudzień 2008, 10,2 mln linii kodu;

  • 2.6.35 - sierpień 2010, 13,4 mln linii kodu;

  • 3.0 - sierpień 2011, 14,6 miliona linii kodu.

  • 3,5 - lipiec 2012, 15,5 miliona linii kodu.

  • 3.10 - lipiec 2013, 15,8 mln linii kodu;

  • 3.16 - sierpień 2014, 17,5 miliona linii kodu;

  • 4.1 - czerwiec 2015, 19,5 miliona linii kodu;

  • 4,7 - lipiec 2016, 21,7 mln linii kodu;

  • 4.12 - lipiec 2017, 24,1 mln linii kodu;

  • 4.18 - sierpień 2018, 25,3 miliona linii kodu.

  • 5.2 - lipiec 2019, 26,55 miliona linii kodu.

  • 5,8 - sierpień 2020, 28,4 miliona linii kodu.

  • 5.13 - czerwiec 2021, 29,2 miliona linii kodu.

Postęp w rozwoju rdzenia:

  • Linux 0.0.1 - wrzesień 1991, pierwsze publiczne wydanie obsługujące tylko procesor i386 i ładowanie z dyskietki;

  • Linux 0.12 - styczeń 1992, kod zaczął być rozpowszechniany na licencji GPLv2;

  • Linux 0.95 - marzec 1992, zapewniał możliwość uruchomienia X Window System, zaimplementował obsługę pamięci wirtualnej i partycji wymiany.

  • Linux 0.96-0.99 - 1992-1993, rozpoczęto prace nad stosem sieciowym. Wprowadzono system plików Ext2, dodano obsługę formatu plików ELF, wprowadzono sterowniki kart dźwiękowych i kontrolerów SCSI, zaimplementowano ładowanie modułów jądra i systemu plików /proc.

  • W 1992 roku pojawiły się pierwsze dystrybucje SLS i Yggdrasil. Latem 1993 roku powstały projekty Slackware i Debian.

  • Linux 1.0 – marzec 1994, pierwsze oficjalne wydanie stabilne;

  • Linux 1.2 - marzec 1995, znaczny wzrost liczby sterowników, wsparcie dla platform Alpha, MIPS i SPARC, rozszerzenie możliwości stosu sieciowego, pojawienie się filtru pakietów, obsługa NFS;

  • Linux 2.0 - czerwiec 1996, wsparcie dla systemów wieloprocesorowych;

  • Marzec 1997: Założenie LKML, listy dyskusyjnej programistów jądra Linuksa;

  • 1998: Uruchomienie pierwszego klastra Linux opartego na Top500, składającego się z 68 węzłów z procesorem Alpha;

  • Linux 2.2 - styczeń 1999, zwiększona wydajność systemu zarządzania pamięcią, dodano obsługę IPv6, zaimplementowano nowy firewall, wprowadzono nowy podsystem dźwiękowy;

  • Linux 2.4 - luty 2001, obsługa systemów 8-procesorowych i 64 GB pamięci RAM, system plików Ext3, obsługa USB, ACPI;

  • Linux 2.6 - grudzień 2003, obsługa SELinux, automatyczne narzędzia dostrajania jądra, sysfs, przeprojektowany system zarządzania pamięcią;

  • W 2005 roku wprowadzono hiperwizor Xen, który zapoczątkował erę wirtualizacji;

  • We wrześniu 2008 roku powstało pierwsze wydanie platformy Android opartej na jądrze Linux;

  • W lipcu 2011 roku, po 10 latach rozwoju gałęzi 2.6.x , dokonano przejścia na numerację 3.x. Liczba obiektów w repozytorium Git osiągnęła 2 miliony;

  • W 2015 roku miało miejsce wydanie jądra Linux 4.0. Liczba obiektów git w repozytorium osiągnęła 4 miliony;

  • W kwietniu 2018 pokonujemy barierę 6 milionów obiektów git-core w repozytorium.

  • W styczniu 2019 powstała gałąź jądra Linux 5.0 . Repozytorium osiągnęło poziom 6,5 miliona obiektów git.

  • Opublikowane w sierpniu 2020 r. jądro 5.8 było największe pod względem liczby zmian wszystkich jąder podczas całego istnienia projektu.

  • Jądro 5.13 ustanowiło rekord liczby deweloperów (2150), których zmiany zostały wprowadzone do jądra.

  • W 2021 roku do gałęzi Linux-next kernel został dodany kod do tworzenia sterowników w języku Rust. Trwają prace nad włączeniem komponentów wspierających Rust w rdzeniu.

68% wszystkich zmian w rdzeniu zostało dokonanych przez 20 najaktywniejszych firm. Na przykład, w rozwój jądra 5,13, i 10% wszystkich zmian jest zaangażowany Intel, 6,5% - Huawei, 5,9% - Red Hat, 5,7% - Linaro, 4,9% - Google, 4,8% - AMD, 3,1% - NVIDIA, 2,8% - Facebook, 2,3% - SUSE, 2,1% - IBM, 1,9 % — Oracle, 1,5% — ARM, 1,4% — kanoniczny. 13,2% zmian zostało przygotowanych przez niezależnych współpracowników lub deweloperów, którzy nie zadeklarowali wprost swojej pracy dla określonych firm. 1,3% zmian przygotowali studenci, doktoranci i przedstawiciele placówek oświatowych. AMD jest liderem pod względem 5,13 linii kodu dodawanych do jądra, z udziałem 20,2% (sterownik amdgpu ma ok. 3 mln linii kodu, co stanowi ok. 10% całkowitego rozmiaru jądra - uwzględniono 2,4 mln linii przez automatycznie generowane pliki nagłówkowe z danymi dla rejestrów GPU ).



Ktoś złośliwy napisał, że student sklecił z nudów kod, który po 30 latach wciąż działa jak gdyby został napisany... przez studenta.

sobota, 18 lutego 2017

Linux (nie?)jest prosty

Wczoraj system zassał sobie sporą porcję (ponad 1 GB) nowych "ulepszeń". W tym nową wersję kernela ivybridge. 
Po ponownym uruchomieniu systemu mogłem podziwiać taki widok:
Na nic zdały się próby wyboru innego kernela przy starcie.
Cóż, wsadziłem w usb pendrajw z Manjaro i "zapacmaniłem" wygodny mhwd-chroot. Dla pamięci: hasło w botowalnym Manjaro to... manjaro.
W konsoli wpisałem sudo mhwd-chroot-shell a następnie sudo mkinitcpio -p linux49:

==> Building image from preset: /etc/mkinitcpio.d/linux49.preset: 'default'
  -> -k /boot/vmlinuz-4.9-x86_64 -c /etc/mkinitcpio.conf -g /boot/initramfs-4.9-x86_64.img
==> Starting build: 4.9.9-1-MANJARO
  -> Running build hook: [base]
  -> Running build hook: [udev]
  -> Running build hook: [autodetect]
  -> Running build hook: [modconf]
  -> Running build hook: [block]
  -> Running build hook: [keyboard]
  -> Running build hook: [keymap]
  -> Running build hook: [plymouth]
  -> Running build hook: [resume]
  -> Running build hook: [filesystems]
  -> Running build hook: [fsck]
==> Generating module dependencies
==> Creating gzip-compressed initcpio image: /boot/initramfs-4.9-x86_64.img
==> Image generation successful
==> Building image from preset: /etc/mkinitcpio.d/linux49.preset: 'fallback'
  -> -k /boot/vmlinuz-4.9-x86_64 -c /etc/mkinitcpio.conf -g /boot/initramfs-4.9-x86_64-fallback.img -S autodetect
==> Starting build: 4.9.9-1-MANJARO
  -> Running build hook: [base]
  -> Running build hook: [udev]
  -> Running build hook: [modconf]
  -> Running build hook: [block]
  -> Running build hook: [keyboard]
  -> Running build hook: [keymap]
  -> Running build hook: [plymouth]
  -> Running build hook: [resume]
  -> Running build hook: [filesystems]
  -> Running build hook: [fsck]
==> Generating module dependencies
==> Creating gzip-compressed initcpio image: /boot/initramfs-4.9-x86_64-fallback.img
==> Image generation successful

Niestety, system nadal się nie uruchamiał, więc wykonałem tym razem  sudo mkinitcpio -p linux44, bo i taki kernel też miałem zainstalowany.
I system się załadował!
Zrobiłem reinstalację kernela linux-ck-ivybridge  4.9.10-1
Wyłączyłem i ponownie uruchomiłem system. Wszystko działa jak powinno.

Warto wiedzieć:
1 #ifndef _ASM_GENERIC_ERRNO_BASE_H
  2 #define _ASM_GENERIC_ERRNO_BASE_H
  3 
  4 #define EPERM            1      /* Operation not permitted */
  5 #define ENOENT           2      /* No such file or directory */
  6 #define ESRCH            3      /* No such process */
  7 #define EINTR            4      /* Interrupted system call */
  8 #define EIO              5      /* I/O error */
  9 #define ENXIO            6      /* No such device or address */
 10 #define E2BIG            7      /* Argument list too long */
 11 #define ENOEXEC          8      /* Exec format error */
 12 #define EBADF            9      /* Bad file number */
 13 #define ECHILD          10      /* No child processes */
 14 #define EAGAIN          11      /* Try again */
 15 #define ENOMEM          12      /* Out of memory */
 16 #define EACCES          13      /* Permission denied */
 17 #define EFAULT          14      /* Bad address */
 18 #define ENOTBLK         15      /* Block device required */
 19 #define EBUSY           16      /* Device or resource busy */
 20 #define EEXIST          17      /* File exists */
 21 #define EXDEV           18      /* Cross-device link */
 22 #define ENODEV          19      /* No such device */
 23 #define ENOTDIR         20      /* Not a directory */
 24 #define EISDIR          21      /* Is a directory */
 25 #define EINVAL          22      /* Invalid argument */
 26 #define ENFILE          23      /* File table overflow */
 27 #define EMFILE          24      /* Too many open files */
 28 #define ENOTTY          25      /* Not a typewriter */
 29 #define ETXTBSY         26      /* Text file busy */
 30 #define EFBIG           27      /* File too large */
 31 #define ENOSPC          28      /* No space left on device */
 32 #define ESPIPE          29      /* Illegal seek */
 33 #define EROFS           30      /* Read-only file system */
 34 #define EMLINK          31      /* Too many links */
 35 #define EPIPE           32      /* Broken pipe */
 36 #define EDOM            33      /* Math argument out of domain of func */
 37 #define ERANGE          34      /* Math result not representable */
 38 
 39 #endif
 40