Π ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Kerla ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π° ΡΠ΄ΡΠΎ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°, Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π½Π° Π΅Π·ΠΈΠΊΠ° Rust. ΠΠΎΠ²ΠΎΡΠΎ ΡΠ΄ΡΠΎ Π΅ Π½Π°ΡΠΎΡΠ΅Π½ΠΎ ΠΊΡΠΌ ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ Ρ ΡΠ΄ΡΠΎΡΠΎ Π½Π° Linux Π½Π° Π½ΠΈΠ²ΠΎ ABI, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π½Π΅ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°Π½ΠΈ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ Π·Π° Linux, Π² ΡΡΠ΅Π΄Π° Π±Π°Π·ΠΈΡΠ°Π½Π° Π½Π° Kerla. ΠΠΎΠ΄ΡΡ ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠΈΡΠ΅ Apache 2.0 ΠΈ MIT. ΠΡΠΎΠ΅ΠΊΡΡΡ ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π° ΠΎΡ ΡΠΏΠΎΠ½ΡΠΊΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π‘Π΅ΠΉΡ ΠΡΡΠ° (Seiya Nuta), ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΠΌΠΈΠΊΡΠΎΡΠ΄Π΅ΡΠ½Π°ΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Resea, Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° Π΅Π·ΠΈΠΊΠ° C.
ΠΠ° ΡΠ΅ΠΊΡΡΠΈΡ Π΅ΡΠ°ΠΏ Π½Π° ΡΠ°Π·Π²ΠΈΡΠΈΠ΅, Kerla ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΡΠ°ΠΌΠΎ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈ Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° x86_64 ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ° ΠΎΡΠ½ΠΎΠ²Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ, ΠΊΠ°ΡΠΎ write, stat, mmap, pipe ΠΈ poll, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠΈΠ³Π½Π°Π»ΠΈ, Π½Π΅Π½Π°Π·ΠΎΠ²Π°Π½ΠΈ ΠΊΠ°Π½Π°Π»ΠΈ ΠΈ ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°. ΠΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ, ΠΊΠ°ΡΠΎ fork, wait4 ΠΈ execve. ΠΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠ΅ tty ΠΈ ΠΏΡΠ΅Π²Π΄ΠΎΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΈ (pty). ΠΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΈ Π·Π°ΡΠ΅Π³Π° ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ initramfs (ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ΅ Π·Π° ΠΌΠΎΠ½ΡΠ°ΠΆΠ° Π½Π° ΠΊΠΎΡΠ΅Π½ΠΎΠ²Π°ΡΠ° Π€Π‘), tmpfs ΠΈ devfs. ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΡΠ΅ ΠΌΡΠ΅ΠΆΠΎΠ² ΡΡΠ΅ΠΊ Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠΎΠΊΠ΅ΡΠΈ TCP ΠΈ UDP, ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° smoltcp.
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ Π΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²ΠΈΠ» Π·Π°ΡΠ΅ΠΆΠ΄Π°ΡΠ° ΡΡΠ΅Π΄Π°, ΠΊΠΎΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π° Π² QEMU ΠΈΠ»ΠΈ Π² Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° Firecracker Ρ virtio-net Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ°, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΡΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΡΠ΅ΡΠ΅Π· SSH. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ musl, Π° Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΡΡΠΈΠ»ΠΈΡ β BusyBox.

ΠΠ° Π±Π°Π·Π°ΡΠ° Π½Π° Docker Π΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠ° ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ Π·Π°ΡΠ΅ΠΆΠ΄Π°ΡΠΈ initramfs Ρ ΡΠ΄ΡΠΎΡΠΎ Π½Π° Kerla. ΠΡΠ΄Π΅Π»Π½ΠΎ ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π°Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π½Π° fish ΠΊΠΎΠΌΠ°Π½Π΄Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° nsh ΠΈ Π³ΡΠ°ΡΠΈΡΠ΅Π½ ΡΡΠ΅ΠΊ Kazari Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° Wayland.

ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π΅Π·ΠΈΠΊΠ° Rust Π² ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ Π½Π°ΠΌΠ°Π»ΠΈ Π±ΡΠΎΡΡ Π½Π° Π³ΡΠ΅ΡΠΊΠΈΡΠ΅ Π² ΠΊΠΎΠ΄Π° Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅Ρ Π½ΠΈΠΊΠΈ Π·Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΠΈ ΠΏΠΎΠ²ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΠ° ΠΏΡΠΈ ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ ΠΏΠ°ΠΌΠ΅ΡΡΠ°. ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΡΠ²Π° Π² Rust ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ ΡΡΠ΅Π· ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ, ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΡΠ΅ΠΆΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ ΠΈ ΠΎΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠΎΠΊΠ° Π½Π° ΠΆΠΈΠ²ΠΎΡ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅ (ΠΎΠ±Π»Π°ΡΡΠΈ Π½Π° Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ), ΠΊΠ°ΠΊΡΠΎ ΠΈ ΡΡΠ΅Π· ΠΎΡΠ΅Π½ΠΊΠ° Π½Π° ΠΊΠΎΡΠ΅ΠΊΡΠ½ΠΎΡΡΡΠ° Π½Π° Π΄ΠΎΡΡΡΠΏΠ° Π΄ΠΎ ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄Π°. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° Rust ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΡΡΠ΅Π΄ΡΡΠ²Π° Π·Π° Π·Π°ΡΠΈΡΠ° ΠΎΡ ΠΏΡΠ΅ΠΏΡΠ»Π²Π°Π½ΠΈΡ Π½Π° ΡΠ΅Π»ΠΈ ΡΠΈΡΠ»Π°, ΠΈΠ·ΠΈΡΠΊΠ²Π° Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅, ΠΏΡΠΈΠ»Π°Π³Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡΡΠ° Π·Π° Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ (immutable) Π½Π° ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΡΠΈΠ»Π½Π° ΡΡΠ°ΡΠΈΡΠ½Π° ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π·Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡΠ΅ Π³ΡΠ΅ΡΠΊΠΈ ΠΈ ΡΠ»Π΅ΡΠ½ΡΠ²Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° Π²Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΡΠ΅Π΄ΡΡΠ²Π°ΡΠ° Π·Π° ΡΡΠΏΠΎΡΡΠ°Π²ΠΊΠ° Ρ ΠΎΠ±ΡΠ°Π·Π΅ΡΠ°.
ΠΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π½ΠΈΡΠΊΠΎ Π½ΠΈΠ²ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ, ΠΊΠ°ΡΠΎ ΡΠ΄ΡΠΎΡΠΎ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°, Rust ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° raw ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ, ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° Π½Π° ΡΡΡΡΠΊΡΡΡΠΈ, in-line Π²ΡΡΠ°Π²ΠΊΠΈ Π½Π° Π°ΡΠ΅ΠΌΠ±Π»Π΅Ρ ΠΈ Π²Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° Π°ΡΠ΅ΠΌΠ±Π»Π΅Ρ. ΠΠ° ΡΠ°Π±ΠΎΡΠ° Π±Π΅Π· ΠΏΡΠΈΠ²ΡΡΠ·Π°Π½ΠΎΡΡ ΠΊΡΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ ΠΎΠ±ΠΎΡΠΎΠ±Π΅Π½ΠΈ crate ΠΏΠ°ΠΊΠ΅ΡΠΈ Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ Π½ΠΈΠ·ΠΎΠ²Π΅, Π²Π΅ΠΊΡΠΎΡΠΈ ΠΈ Π±ΠΈΡΠΎΠ²ΠΈ ΡΠ»Π°Π³ΠΎΠ²Π΅. ΠΠ΅ΠΆΠ΄Ρ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π°ΡΠ° ΡΠ΅ ΠΎΡΠ±Π΅Π»ΡΠ·Π²Π°Ρ ΠΈ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΠΎΡΠ΅Π½ΠΊΠ° Π½Π° ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΊΠΎΠ΄Π° (linter, rust-analyzer) ΠΈ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° unit ΡΠ΅ΡΡΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°Ρ Π½Π΅ ΡΠ°ΠΌΠΎ Π½Π° ΡΠ΅Π°Π»Π½ΠΎ ΠΎΠ±ΠΎΡΡΠ΄Π²Π°Π½Π΅, Π½ΠΎ ΠΈ Π² QEMU.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
