เป‚เบ„เบ‡เบเบฒเบ™ Kerla เบเปเบฒเบฅเบฑเบ‡เบžเบฑเบ”เบ—เบฐเบ™เบฒ kernel เบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เบเบฑเบš Linux เปƒเบ™เบžเบฒเบชเบฒ Rust

เป‚เบ„เบ‡เบเบฒเบ™ Kerla เบเปเบฒเบฅเบฑเบ‡เบžเบฑเบ”เบ—เบฐเบ™เบฒ kernel เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ—เบตเปˆเบ‚เบฝเบ™เปƒเบ™เบžเบฒเบชเบฒ Rust. kernel เปƒเปเปˆ เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เปเบกเปˆเบ™เบชเบธเบกเปƒเบชเปˆเบเบฒเบ™เปƒเบซเป‰เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เบเบฑเบš Linux kernel เปƒเบ™เบฅเบฐเบ”เบฑเบš ABI, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เป„เบŸเบฅเปŒเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ”เบฑเบ”เปเบเป‰เบ—เบตเปˆเบ–เบทเบเบฅเบงเบšเบฅเบงเบกเบชเปเบฒเบฅเบฑเบš Linux เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเบญเบตเบ‡เปƒเบชเปˆ Kerla. เบฅเบฐเบซเบฑเบ”เป„เบ”เป‰เบ–เบทเบเปเบˆเบเบขเบฒเบเบžเบฒเบเปƒเบ•เป‰เปƒเบšเบญเบฐเบ™เบธเบเบฒเบ” Apache 2.0 เปเบฅเบฐ MIT. เป‚เบ„เบ‡เบเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปเบกเปˆเบ™เป„เบ”เป‰เบ–เบทเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเป‚เบ”เบเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบŠเบฒเบงเบเบตเปˆเบ›เบธเปˆเบ™ Seiya Nuta, เป€เบ›เบฑเบ™เบ—เบตเปˆเบฎเบนเป‰เบˆเบฑเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™ microkernel Resea, เบ‚เบฝเบ™เปƒเบ™เบžเบฒเบชเบฒ C.

เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เบญเบ‡เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™, Kerla เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เบฅเบฐเบšเบปเบš x86_64 เปเบฅเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป€เบญเบตเป‰เบ™เบฅเบฐเบšเบปเบšเบžเบทเป‰เบ™เบ–เบฒเบ™เป€เบŠเบฑเปˆเบ™: write, stat, mmap, pipe เปเบฅเบฐ poll, เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเบฑเบ™เบเบฒเบ™, เบ—เปเปˆเบ—เบตเปˆเบšเปเปˆเบกเบตเบŠเบทเปˆเปเบฅเบฐเบชเบฐเบซเบผเบฑเบšเบชเบฐเบžเบฒเบšเบเบฒเบ™. เบเบฒเบ™เป‚เบ—เป€เบŠเบฑเปˆเบ™: fork, wait4, เปเบฅเบฐ execve เปเบกเปˆเบ™เบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เป€เบžเบทเปˆเบญเบ„เบงเบšเบ„เบธเบกเบ‚เบฐเบšเบงเบ™เบเบฒเบ™. เบกเบตเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบš tty เปเบฅเบฐ pseudo-terminals (pty). เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบฎเบญเบ‡เบฎเบฑเบšเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เปเบกเปˆเบ™ initramfs (เปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบฎเบฒเบ), tmpfs เปเบฅเบฐ devfs. stack เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ—เบตเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ TCP เปเบฅเบฐ UDP sockets เปเบกเปˆเบ™เบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰, เบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” smoltcp.

เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเป„เบ”เป‰เบเบฐเบเบฝเบกเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก boot เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™ QEMU เบซเบผเบทเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡ virtual Firecracker เบเบฑเบšเป„เบ”เป€เบงเบต virtio-net, เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบœเปˆเบฒเบ™ SSH เปเบฅเป‰เบง. musl เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบ›เบฑเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบฅเบฐเบšเบปเบš, เปเบฅเบฐ BusyBox เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบ›เบฑเบ™เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰.

เป‚เบ„เบ‡เบเบฒเบ™ Kerla เบเปเบฒเบฅเบฑเบ‡เบžเบฑเบ”เบ—เบฐเบ™เบฒ kernel เบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เบเบฑเบš Linux เปƒเบ™เบžเบฒเบชเบฒ Rust

เบฅเบฐเบšเบปเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบตเปˆเบญเบตเบ‡เปƒเบชเปˆ Docker เป„เบ”เป‰เบ–เบทเบเบเบฐเบเบฝเบกเบ—เบตเปˆเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเป‰เบฒเบ‡ boot initramfs เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡เบเบฑเบš Kerla kernel. เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ, เปเบเบฐเบŠเปเปเบง nsh เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบšเบ›เบฒเปเบฅเบฐ Kazari GUI stack เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเป‚เบ›เป‚เบ•เบ„เบญเบ™ Wayland เบเปเบฒเบฅเบฑเบ‡เบ–เบทเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ.

เป‚เบ„เบ‡เบเบฒเบ™ Kerla เบเปเบฒเบฅเบฑเบ‡เบžเบฑเบ”เบ—เบฐเบ™เบฒ kernel เบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เบเบฑเบš Linux เปƒเบ™เบžเบฒเบชเบฒ Rust

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบžเบฒเบชเบฒ Rust เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบซเบผเบธเบ”เบœเปˆเบญเบ™เบˆเปเบฒเบ™เบงเบ™เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เปƒเบ™เบฅเบฐเบซเบฑเบ”เป‚เบ”เบเปƒเบŠเป‰เป€เบ•เบฑเบเบ™เบดเบเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบกเบ—เบตเปˆเบ›เบญเบ”เป„เบžเปเบฅเบฐเป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบšเบฑเบ™เบซเบฒเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ. Rust เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเปƒเบ™เป€เบงเบฅเบฒเบฅเบงเบšเบฅเบงเบกเป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบดเบ‡, เบเบฒเบ™เป€เบ›เบฑเบ™เป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธเปเบฅเบฐเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบญเบฒเบเบธเบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธ (เบ‚เบญเบšเป€เบ‚เบ”), เปเบฅเบฐเป‚เบ”เบเบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡เบ‚เบญเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเปƒเบ™เป€เบงเบฅเบฒเปเบฅเปˆเบ™. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, Rust เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™ overflows เบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบก, เบ•เป‰เบญเบ‡เบเบฒเบ™เบ„เปˆเบฒเบ•เบปเบงเปเบ›เบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰, เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบดเบ‡เปเบฅเบฐเบ•เบปเบงเปเบ›เบ—เบตเปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบ”เป‰เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบžเบดเบกเปเบšเบšเบ„เบปเบ‡เบ—เบตเปˆเบ—เบตเปˆเป€เบ‚เบฑเป‰เบกเปเบ‚เบ‡เป€เบžเบทเปˆเบญเบซเบผเบธเบ”เบœเปˆเบญเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบฒเบ‡เบ”เป‰เบฒเบ™เป€เบซเบ”เบœเบปเบ™, เปเบฅเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบกเบนเบ™เบ„เปˆเบฒเบเบฒเบ™เบ›เป‰เบญเบ™เป€เบ‚เบปเป‰เบฒเบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™. เบ‚เปโ€‹เบ‚เบญเบšโ€‹เปƒเบˆโ€‹เบเบฑเบšโ€‹เบเบฒเบ™โ€‹เบˆเบฑเบšโ€‹เบ„เบนเปˆโ€‹เบฎเบนเบšโ€‹เปเบšเบš ..

เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบญเบปเบ‡เบ›เบฐเบเบญเบšเบฅเบฐเบ”เบฑเบšเบ•เปˆเปเบฒ, เป€เบŠเบฑเปˆเบ™ OS kernel, Rust เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบŠเบตเป‰เบงเบฑเบ”เบ–เบธเบ”เบดเบš, เบเบฒเบ™เบซเบธเป‰เบกเบซเปเปˆเป‚เบ„เบ‡เบชเป‰เบฒเบ‡, เปเบœเปˆเบ™เบ›เบฐเบเบญเบš inline, เปเบฅเบฐเบเบฒเบ™เบเบฑเบ‡เป„เบŸเบฅเปŒ assembler. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบœเบนเบเบกเบฑเบ”เบเบฑเบšเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™, เบกเบตเบŠเบธเบ” crate เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™เบ—เบตเปˆเบกเบตเบชเบฒเบ, vectors เปเบฅเบฐ bit flags. เบ›เบฐเป‚เบซเบเบ”เบญเบตเบเบญเบฑเบ™เบซเบ™เบถเปˆเบ‡เปเบกเปˆเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™เบ•เบปเบงเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เบ„เบธเบ™เบ™เบฐเบžเบฒเบšเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ” (linter, rust-analyzer) เปเบฅเบฐเบเบฒเบ™เบชเป‰เบฒเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เบฎเบฒเบ”เปเบงเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡, เปเบ•เปˆเบเบฑเบ‡เบขเบนเปˆเปƒเบ™ QEMU.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™