αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™ MirageOS 3.6 αžŠαŸ‚αž›αž‡αžΆαžœαŸαž‘αž·αž€αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸ…αž›αžΎαž€αŸ†αž–αžΌαž›αž“αŸƒ hypervisor

αž”αžΆαž“αž€αžΎαžαž‘αžΎαž„ αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž‚αž˜αŸ’αžšαŸ„αž„ MirageOS ៣.αŸ αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαžαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ‚αž˜αž½αž™ αžŠαŸ‚αž›αž€αŸ’αž“αž»αž„αž“αŸ„αŸ‡αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αŸ‚αž€αž…αžΆαž™αž‡αžΆ "unikernel" αžŠαŸ‚αž›αž˜αžΆαž“αž•αŸ’αž‘αž»αž€αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„ αžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αžΆαž“αžŠαŸ„αž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž”αŸ’αžšαžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αžαžΊαžŽαŸ‚αž› OS αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€ αž“αž·αž„αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžŽαžΆαž˜αž½αž™αž‘αžΎαž™αŸ” αž—αžΆαžŸαžΆ OCaml αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž’αž—αž·αžœαžŒαŸ’αžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” αž€αžΌαžŠαž‚αž˜αŸ’αžšαŸ„αž„ αž…αŸ‚αž€αž…αžΆαž™β€‹αžŠαŸ„αž™ αž€αŸ’αžšαŸ„αž˜αž’αžΆαž‡αŸ’αž‰αžΆαž”αŸαžŽαŸ’αžŽ ISC αž₯αžαž‚αž·αžαžαŸ’αž›αŸƒαŸ”

αž˜αž»αžαž„αžΆαžšαž€αž˜αŸ’αžšαž·αžαž‘αžΆαž”αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž‡αžΆαž‘αž˜αŸ’αžšαž„αŸ‹αž”αžŽαŸ’αžŽαžΆαž›αŸαž™αžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŽαžΆαž˜αž½αž™ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸ„αŸ‡αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž„αž€αŸ’αžšαž„αž‡αžΆαžαžΊαžŽαŸ‚αž›αž―αž€αž‘αŸαžŸ (αž‚αŸ„αž›αž‚αŸ†αž“αž·αž αž™αžΌαž“αžΈαž€αžŽαŸ‚αž›) αžŠαŸ‚αž›αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž“αŸ…αž›αžΎαž€αŸ†αž–αžΌαž›αž“αŸƒ Xen, KVM, BHyve αž“αž·αž„ VMM (OpenBSD) hypervisors αž“αŸ…αž›αžΎαž€αŸ†αž–αžΌαž›αž“αŸƒαžœαŸαž‘αž·αž€αžΆαž‘αžΌαžšαžŸαŸαž–αŸ’αž‘ αžŠαŸ‚αž›αž‡αžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αžŸαŸ’αžαžΆαž“αžŠαŸ‚αž›αž’αž“αž»αž›αŸ„αž˜αžαžΆαž˜ POSIX αž¬αž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αž™αžΆαž€αžΆαžŸαž–αž–αž€ Amazon Elastic Compute αž“αž·αž„ Google Compute Engine αŸ”

αž”αžšαž·αž™αžΆαž€αžΆαžŸαžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž˜αž·αž“αž˜αžΆαž“αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž“αžΆαŸ†αž’αŸ„αž™ αž αžΎαž™αž˜αžΆαž“αž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž‡αžΆαž˜αž½αž™ hypervisor αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αž‰αŸ’αž‡αžΆ αž¬αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’ αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž€αžΆαžšαž…αŸ†αžŽαžΆαž™αž›αžΎαž€αžΆαžšαž…αŸ†αžŽαžΆαž™αž™αŸ‰αžΆαž„αž…αŸ’αžšαžΎαž“ αž“αž·αž„αž”αž„αŸ’αž€αžΎαž“αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αŸ” αž€αžΆαžšαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ MirageOS αž˜αžΆαž“αž”αžΈαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αŸ– αžšαŸ€αž”αž…αŸ†αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαžŠαŸ‚αž›αž”αŸ’αžšαžΎαž€αŸ’αž“αž»αž„αž”αžšαž·αžŸαŸ’αžαžΆαž“ αž€αž‰αŸ’αž…αž”αŸ‹ OPAMαž€αžΆαžšαž€αžŸαžΆαž„αž”αžšαž·αžŸαŸ’αžαžΆαž“ αž“αž·αž„αž€αžΆαžšαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αžšαž·αžŸαŸ’αžαžΆαž“αŸ” αž–αŸαž›αžœαŸαž›αžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž›αžΎαž€αŸ†αž–αžΌαž›αž“αŸƒ Xen αž‚αžΊαž•αŸ’αž’αŸ‚αž€αž›αžΎαžαžΊαžŽαŸ‚αž›αžŠαŸ‚αž›αž”αžΆαž“αžŠαž€αž…αŸαž‰ αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžαŸ’αž“αžΆαžαžαžΌαž…αž“αž·αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ hypervisors αž“αž·αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŠαŸ‚αž›αž˜αžΆαž“αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž›αžΎαžαžΊαžŽαŸ‚αž›αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” សូទូ ្.

αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž€αžΆαžšαž–αž·αžαžŠαŸ‚αž›αžαžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž“αž·αž„αž”αžŽαŸ’αžŽαžΆαž›αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‡αžΆαž—αžΆαžŸαžΆ OCaml αž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αž€αŸαžŠαŸ„αž™ αž”αžšαž·αž™αžΆαž€αžΆαžŸαž›αž‘αŸ’αž’αž•αž›αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αŸ’αž’ αž“αž·αž„αž‘αŸ†αž αŸ†αžαž·αž…αžαž½αž…αž”αŸ†αž•αž»αž (αž§αž‘αžΆαž αžšαžŽαŸ αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ DNS αž”αŸ’αžšαžΎαžαŸ’αžšαžΉαž˜αžαŸ‚ 200 KB)αŸ” αž€αžΆαžšβ€‹αžαŸ‚αž‘αžΆαŸ†β€‹αž”αžšαž·αžŸαŸ’αžαžΆαž“β€‹αž€αŸβ€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž’αŸ’αžœαžΎβ€‹αž±αŸ’αž™β€‹αžŸαžΆαž˜αž‰αŸ’αž‰β€‹αž•αž„β€‹αžŠαŸ‚αžš αž–αŸ’αžšαŸ„αŸ‡β€‹αž”αŸ’αžšαžŸαž·αž“β€‹αž”αžΎβ€‹αžœαžΆβ€‹αž…αžΆαŸ†αž”αžΆαž…αŸ‹β€‹αž€αŸ’αž“αž»αž„β€‹αž€αžΆαžšβ€‹αž’αŸ’αžœαžΎβ€‹αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–β€‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž¬β€‹αž•αŸ’αž›αžΆαžŸαŸ‹β€‹αž”αŸ’αžαžΌαžšβ€‹αž€αžΆαžšβ€‹αž€αŸ†αžŽαžαŸ‹β€‹αž“αŸ„αŸ‡ αžœαžΆβ€‹αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹β€‹αž αžΎαž™β€‹αž€αŸ’αž“αž»αž„β€‹αž€αžΆαžšβ€‹αž”αž„αŸ’αž€αžΎαž αž“αž·αž„β€‹αž”αžΎαž€β€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšβ€‹αž”αžšαž·αžŸαŸ’αžαžΆαž“β€‹αžαŸ’αž˜αžΈαŸ” αž‚αžΆαŸ†αž‘αŸ’αžš αž”αžŽαŸ’αžŽαžΆαž›αŸαž™αžšαžΆαž”αŸ‹αžŸαž·αž” αž‡αžΆαž—αžΆαžŸαžΆ OCaml αžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αžαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž”αžŽαŸ’αžαžΆαž‰ (DNS, SSH, OpenFlow, HTTP, XMPP αŸ”αž›αŸ”) αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž€αžΆαžšαž•αŸ’αž‘αž»αž€ αž“αž·αž„αž•αŸ’αžαž›αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆαŸ”

αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŸαŸ†αžαžΆαž“αŸ‹αŸ—αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αžαŸ’αž˜αžΈαž‚αžΊαž‘αžΆαž€αŸ‹αž‘αž„αž‘αŸ…αž“αžΉαž„αž€αžΆαžšαž•αŸ’αžαž›αŸ‹αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαžαŸ’αž˜αžΈαžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž’αž”αŸ‹αž§αž”αž€αžšαžŽαŸ Solo5 0.6.0 (αž”αžšαž·αžŸαŸ’αžαžΆαž“αž”αŸ’αžšαž’αž”αŸ‹αžαŸ’αžŸαžΆαž…αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš unikerel)αŸ–

  • αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš unikernel MirageOS αž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αž™αžΆαž€αžΆαžŸαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€ spt (β€œαž€αžΆαžšαžŠαŸαž‰αžαŸ’αž›αŸƒαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αŸ’αžšαž’αž”αŸ‹αžαŸ’αžŸαžΆαž…αŸ‹β€) αžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αžŠαŸ„αž™αž”αŸ’αžšαž’αž”αŸ‹αž§αž”αž€αžšαžŽαŸ សូទូ ្. αž“αŸ…αž–αŸαž›αž”αŸ’αžšαžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαžΆαž„αž€αŸ’αžšαŸ„αž™ spt αžαžΊαžŽαŸ‚αž› MirageOS αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž›αžΈαž“αž»αž… αžŠαŸ‚αž›αž€αžΆαžšαžŠαžΆαž€αŸ‹αž±αŸ’αž™αž“αŸ…αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αžαž·αž…αžαž½αž…αž”αŸ†αž•αž»αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎ seccomp-BPF αŸ”
  • αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αž αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž–αžΈαž‚αž˜αŸ’αžšαŸ„αž„ Solo5 αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž€αŸ†αžŽαžαŸ‹αž’αžΆαžŠαžΆαž”αŸ‹αž‘αŸαžšαž”αžŽαŸ’αžαžΆαž‰αž…αŸ’αžšαžΎαž“ αž“αž·αž„αž§αž”αž€αžšαžŽαŸαž•αŸ’αž‘αž»αž€αžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ… unikerel αž€αŸ’αž“αž»αž„αž—αžΆαž–αž―αž€αŸ„αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαžΆαž„αž€αŸ’αžšαŸ„αž™ hvt, spt αž“αž·αž„ muen (αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ genode αž“αž·αž„ virtio backends αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž…αŸ†αž–αŸ„αŸ‡αž§αž”αž€αžšαžŽαŸαž˜αž½αž™);
  • αž€αžΆαžšαž€αžΆαžšαž–αžΆαžšαž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž€αŸ’αžšαŸ„αž™αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎ Solo5 (hvt, spt) αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž„αŸ’αžšαžΉαž„ αž§αž‘αžΆαž αžšαžŽαŸ αž€αžΆαžšαž€αžŸαžΆαž„αž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž” SSP (Stack Smashing Protection) αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž‡αžΌαž“αŸ”

αž”αŸ’αžšαž—αž–: opennet.ru

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹