Dmitry Zavalishin ááẠGenode microkernel OS áááºáááºážáá»ááºááœááºá¡áá¯ááºáá¯ááºááẠPhantom áááºáááºááŸá¯á áá áºá virtual machine áá áºáá¯ááᯠport áá¯ááºááá¯á·ááá±á¬áá»ááºá¡ááŒá±á¬ááºážááŒá±á¬áá²á·áááºá Phantom á á¡ááááá¬ážááŸááºážááẠááŸá±á·ááŒá±ážááá±á¬áá»ááºáá»á¬ážá¡ááœáẠá¡áááºááá·áºááŒá áºáá±ááŒá®ááŒá áºááŒá®áž Genode-based áá¬ážááŸááºážááᯠááá¯ááŸá áºáá¯ááºááœáẠá¡áá¯á¶ážááŒá¯ááẠá¡áááºááá·áºááŒá áºáá±ááŒá®áᯠá¡ááºáá¬áá»á°ážááœáẠááŸááºáá¬ážáá¬ážáááºá áá áºáá»áááºáááºážááŸá¬áááºá ááá±á¬áá»ááºáááºááá¯ááºááœáẠá¡áá¯ááºáá¯ááºááá¯ááºáá±á¬ ááá±á¬ááá¬ážááá¯ááºáᬠááŸá±á·ááŒá±ážáá¯á¶á á¶ááá¯áᬠááŒá±áá¬áá¬ážááŒá®ážá á ááºááŸá¯áá¯ááºáááºážáá¯á¶ážá¡ááœáẠááá·áºáá»á±á¬áºááá·áºá¡ááá·áºááá¯á· ááá±á¬ááºááŸááá±ážááá·áº áááºááŒáááºááŸá¯ááŸáá·áº áá¯ááºáá±á¬ááºááá¯ááºá áœááºážááŸáá·áº áááºááœá±á·á ááºážáááºááŸá¯áá»á¬ážá¡ááœáẠááá·áºáá»á±á¬áºáá±á¬ á¡ááºáá¬áá¬ážááŸááºážááœá²á·á ááºážááŒááºáž áááºáááºážá¡á á®á¡á ááºáá»á¬ážááŒá¬ážááœááºá Third-party developer áá»á¬ážááá±á¬áºááŒáááºá
ááá±á¬áá»ááºáá¯ááºááᯠLGPL ááá¯ááºá ááºá¡á±á¬ááºááœáẠááŒáá·áºáá±áá¬ážáá±á¬áºáááºáž áááºáááá¯ááŸá±á¬ááºááŸá¯ááœáẠáá±á¬ááºáá¯á¶ážááŒá±á¬ááºážáá²ááŸá¯ááŸá¬ ááá¯áááºáá¬á 2019 áááºá áœá²ááŒá áºáááºá Innopolis ááá¹áááá¯ááºá០áá»á±á¬ááºážáá¬áž Anton Antonov á០2020 áá¯ááŸá Ạáá®áááºáá¬áááááºážá ááááºážááááºážáá¬ážáá²á·áá±á¬ Genode á¡ááœáẠáááºáááºážáá áºáá¯áá«ááŸááá±á¬ ááá±á¬áá»ááºááŸáá·áºáááºááá¯ááºááá·áº á¡áá»á¬ážáá°ááŸá¬ áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠááááºážáááºážáá¬ážáááºá
2000 áá¯ááŸá áºáá»á¬ážá¡á á±á¬ááá¯ááºážááááºážá Phantom áááºáááºááŸá¯á áá áºááẠDmitry Zavalishin áááá¯ááºáá±ážááá¯ááºáá¬ááá±á¬áá»ááºáá áºáá¯á¡ááŒá Ạááœá¶á·ááŒáá¯ážáá¬áá²á·ááŒá®áž 2010 áá¯ááŸá áºááŸá á áááºážááᯠDmitry ááŸáááºáá®ážáá¬ážáá±á¬ Digital Zone áá¯áá¹ááá®ááá±á¬ááºáá¶á¡á±á¬ááºááœáẠááœáŸá²ááŒá±á¬ááºážáá±ážáá²á·áááºá á áá áºááẠááŒáá·áºáá¬ážáá±á¬áá¯á¶ááŒááºá áááºáá»áááŸá¯á¡áá±á«áº á¡á¬áá¯á¶á áá¯ááºááŒá®áž "á¡áá¬áá¬ááẠááá¯ááºáá áºáá¯ááŒá áºáááº" áá°áá±á¬ á¡áá°á¡áááᯠ"á¡áá¬áá¬ááẠááá¯ááºáá áºáá¯ááŒá áºáááº" áá°áá±á¬ á¡áá°á¡áááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááŒá±á¬áá·áº ááŸááºáá¬ážááœááºáá±á¬ááºážááŒá®áž ááŸááºáá¬ááºá¡ááŒá±á¡áá±ááŸáá·áº ááá¯ááŸá±á¬ááºááŸá¯á¡ááŒá±á¡áá±ááŒá±á¬áá·áº ááá¯ááºáá»á¬ážááᯠá¡áá¯á¶ážáááŒá¯áá² áá¯ááºáá±á¬ááºááá¯ááºá á±áá«áááºá á ááºáááºáááŒááºá¡áá¯ááºáá¶ááá¬á Phantom ááŸá á¡ááá®áá±ážááŸááºážáá»á¬ážááᯠáááºááá¯ááºážááŒááºážáááŒá¯áá±á¬áºáááºáž áááºááá¯ááºážááŒá®áž á¡ááŸá±á¬áá·áºá¡ááŸááºáá±ážááá·áºáá±áá¬á០ááŒááºáááºá áááºáá«áááºá ááááºážááŸááºáá»á¬ážááŸáá·áº áá±áá¬áááºáá±á¬ááºáá¯á¶áá»á¬ážá¡á¬ážáá¯á¶ážááᯠá¡ááá®áá±ážááŸááºážááá¯á¡ááºáá±ááá»áŸ áá¬ááááºáá¯á¶áž ááááºážáááºážáá¬ážááá¯ááºááŒá®áž áááá¯ááááºáá¬ááẠáá±áá¬ááááºážáááºážááŒááºážá¡ááœáẠá¡áá°ážá áá¯ážááááºáá±ááẠáááá¯á¡ááºáá«á
Phantom ááŸá á¡ááá®áá±ážááŸááºážáá»á¬ážááᯠJava virtual machine ááŸáá·áºáááºáá°áá±á¬ stack-based virtual machine ááœááºáááºáááºááá·áº bytecode ááŒáá·áºá á¯á ááºážáá¬ážáááºá virtual machine ááẠá¡ááá®áá±ážááŸááºážááŸááºáá¬ááºá áááºááŒá²ááŸá¯ááᯠáá±áá»á¬á á±ááẠ- á áá áºááẠvirtual machine á áá»áŸááºáá áºááŒááºááá¯ááºáá»ááºáá»á¬ážá¡á¬áž á¡ááŒá²áááºážáá®áá®áá¬ááá¯á· á¡áá»áááºá¡áá«á¡ááá¯áẠááŒááºáááºáááºááŸááºáááºá á ááºááááºááŒááºáž ááá¯á·ááá¯áẠáá»ááºá á®ážááœá¬ážááŒá®ážáá±á¬ááºá áá±á¬ááºáá¯á¶ážááááºážáááºážáá¬ážááá·áº ááŸááºáá¬ááºáá»áŸááºáá áºááŒááºááá¯ááºáá»ááºá០á áááºááŒá®áž á¡áá¯ááºáááºáááºáá¯ááºáá±á¬ááºááá¯ááºáááºá áá»áŸááºáá áºááŒááºááá¯ááºáá»ááºáá»á¬ážááᯠá¡áááºáááŒááºáá¯ááºááœáẠáááºáá®ážáá¬ážááŒá®áž virtual machine ááá¯ááºáá±á¬ááºáá»ááºááᯠáá±áá¹ááááºááŒááºážáááŸááá² áááºáá®ážáá¬ážáá±á¬áºáááºážá virtual machine ááá¯áááºááœá¬ážááá²á·ááá¯á· disk ááœááºááááºážáááºážááŒá®áž áááºáá¶á áááºááá·áºá¡áá« áá áºááŒáááºá¡áá»ááºááᯠáá»áŸááºáá áºááŒááºá¡ááœááºáž ááŸááºáááºážáááºáá¬ážáááºá
á¡ááá®áá±ážááŸááºážáá»á¬ážá¡á¬ážáá¯á¶ážááẠkernel ááŸáá·áº applications áá»á¬ážá¡ááŒá¬áž áááºá ááºááá¯ááºáá»á¬áž ááá¯á¡ááºááŸá¯ááᯠáááºááŸá¬ážáá±ážááá·áº áá¯á¶ááá¹áá¬ááááºá á¬áá±áá¬áá áºáá¯ááœáẠáááºáááºáá±ááŒá®ážá áááºááœáŸááºážáá±ážááá¯á·ááŒááºážááŸáá áºááá·áº á¡áá¬ááá¹áá¯áá»á¬ážááᯠáááŸááºááá¯ááºááá·áº virtual machine ááœááºáááºáááºáá±áá±á¬ application áá»á¬ážááŒá¬áž á¡ááŒááºá¡ááŸááºáááºááœááºááŸá¯ááᯠáááááá¬áá¬ááá¯ážááŸááºážá á±ááŒá®áž ááŒááºáááºá á±áááºá ááá·áºáá»á±á¬áºáá±á¬áááºážáááºážáá»á¬ážááᯠáá±á«áºááá¯ááŒááºážááŒáá·áºáᬠáááŸáááá¯ááºáá±á¬ á¡ááá¯ážá¡áá¬ážáá»á¬ážááᯠá¡áá¬ááá¹áá¯áá»á¬ážá¡ááá·áºááœáẠááœá²áá¯ááºááŒááºáž (ááœáŸááºááááºážááááºážáááºá¹áá»á¬áááŸááá«)á ááááºážááá¬ááºážáááºááá¯ážáá»á¬ážá¡áá«á¡ááẠáááºááá·áºáá±áá¬ááá¯áááᯠáá®ážááŒá¬ážá¡áá¬ááá¹áá¯áá»á¬ážá¡ááŒá Ạáá¯ááºáá±á¬ááºáááºá
á¡ááá®áá±ážááŸááºážá¡ááœááºá á¡áá¯ááºááẠáááºááá¯ááºááŒá áºáá±áá¯á¶áááŒá®áž OS ááŒááºáááºá áááºááŒááºážá áá»ááºáá»ááŒááºážááŸáá·áº ááœááºáá»á°áá¬ááááºááŒááºážáá»á¬ážáá±á«áºááœááºáá°áááºááŒááºážáááŸááá«á Phantom á¡ááœáẠáááá¯ááááºážáááºážáá¯á¶á á¶ááẠá¡áá¬ááá¹áá¯áááá¯ááááºážáááºážáá¬áá¬á áá¬ážá¡ááœáẠáááºáá±á¬á¡áá«á០ááááºááá¬áž á¡ááá®áá±ážááŸááºážáá¬áá¬ááᯠáá¯ááºáá±á¬ááºááŒááºážááŸáá·áº ááŸáá¯ááºážááŸááºáá«áááºá Phantom ááá¯á· Java áááá¯ááááºáá»á¬ážááᯠáááºáá±á¬ááºááŒááºážááẠJVM ááá¯á· Phantom virtual machine á áá°áá®ááŸá¯ááŒáá·áº áá¶á·ááá¯ážáá±ážáá±á¬ á¡ááá®áá±ážááŸááºáž ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážá á¡ááá áááºážáááºážáá»á¬ážáá²á០áá áºáá¯áᯠáá°ááá«áááºá Java áá¬áá¬á áá¬ážá¡ááœáẠbytecode compiler á¡ááŒááºá ááá±á¬áá»ááºááẠPython ááŸáá·áº C# á¡ááœáẠcompilers áá»á¬ážááᯠáááºáá®ážáááºááŸáá·áº WebAssembly intermediate code á០áá¬áá¬ááŒááºáá° áá áºáŠážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠá á®á ááºáá¬ážáááºá
áá®áá®ááá¯ááŸáá·áº á¡áá¶áá¯ááºáá±á¬ááºááŒááºážáá²á·ááá¯á·áá±á¬ ááŒáá·áºáá¬ážáá±á¬á áœááºážáá±á¬ááºáááºááá¯á¡ááºááá·áº áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºáááºá áá®ážááŒá¬ážá á¬ááœá²áá»á¬ážááœáẠáá°áááºážáá¯ááºááŒáá·áº binary á¡áá¬ááá¹áá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºááá¯ááºááẠ(LLVM ááᯠbinary á¡áá¬ááá¹áá¯áá»á¬ážááᯠá á¯á ááºážáááºá¡ááœáẠá¡áá¯á¶ážááŒá¯áááº)á á¡ááá·áºáááá·áº kernel áááºáá±á¬ááºááŸá¯áá»á¬ážááᯠáááºáá±á¬ááºááŒáá·áºááŸá¯áááºá á¡áá»áá¯á·áá±á¬ VM á¡áááºážáá»á¬áž (âá¡ááœááºážááá¯ááºážâ á¡áááºážáá»á¬áž) ááᯠOS kernel á¡ááá·áºááœáẠá¡áá±á¬ááºá¡áááºáá±á¬áºáá«áááºá Linux á¡ááá®áá±ážááŸááºážáá»á¬ážáááºáááºáááºá¡ááœáẠUnix áá¯ááºáááºážá ááºáá»á¬ážáá¯ááºáá±á¬ááºáááºá¡ááœáẠááá¯á¡ááºáá±á¬áá±á«áºááá¯ááŸá¯áá»á¬ážááᯠá¡áá¯áá°áááºá¡ááœáẠPOSIX á¡ááœáŸá¬ááᯠáá¶á·ááá¯ážáá±ážááẠ(POSIX á¡ááœáŸá¬ááŸá á¡ááºááºáá®áá±ážááŸááºážáá»á¬ážá¡ááœáẠáááºáá¶á·ááá¯ááºááŒá²ááŸá¯ááᯠááá±ážáá±ážáá«)á
ááá¬ážááá¯ážáá» Phantom OS ááœáẠááá±á¬áá»ááºááᯠáááááá¬áᬠááŸá¯ááºááœá±ážá á±ááá·áº áá¬á·ááºáá²ááŒáá·áº áá¯ááºáá±á¬ááºááá·áº ááŒáá¯ážáá»á¬ážá¡ááŒááºá ááá¯ážáᬠPhantom OS ááœáẠáá»ááºááŸá±á¬ááºááŸá¯áá»á¬ážá áááºááá¯áá®áááºáá±áá»á¬á á¡ááŸáá¯ááºá á¯áá±á¬ááºážáá°á áá áºááŒáá¯ááºáááºážáá¯ááºáá±á¬ááºááá·áº áááºážáááá¯ááºááá¯áẠkernel áá«áááºáááºá ááœááºááœááºáá»ááºáá»áẠá¡áá¯á¶ážááŒá¯ááẠá¡áááºááá·áºááŒá áºááŒááºážá áá®ážááŒá¬ážá network stack áá áºáá¯á ááááºáá áºá áá áºááœá²áá áºáá¯ááŸáá·áº user interface áá áºáá¯áá«ááŸááá±á¬ á¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠáá®ááœááºáá»ááºááŸááááºá ááááºáá áºá áá áºááœá²ááŸáá·áº window manager ááẠkernel á¡ááá·áºááœáẠáá¯ááºáá±á¬ááºáá±áááºááŸá¬ ááŸááºáá¬ážá áá¬ááŒá áºáááºá
ááá±á¬áá»ááºá áááºááŒáááºááŸá¯á áááºáá±á¬ááºáááœááºáá°ááŸá¯ááŸáá·áº áá¯á¶ááŒá¯á¶áá±ážááᯠááá¯ážááŒáŸáá·áºáááºá¡ááœáẠáá»á¬áááºáá¯áá¹ááá® Genode Labs á០ááŒá®ážááŒááºááá·áº á¡ááœáá·áº microkernel áááºáááºááŸá¯á áá ẠGenode á á¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á á¡áá¯ááºáá¯ááºááẠPhantom virtual machine ááᯠport áá¯ááºááẠááŒáá¯ážáááºážáá²á·áááºá Genode ááá¯á¡ááŒá±áá¶áá¬ážáá±á¬ Phantom ááᯠá ááºážáááºááá¯áá°áá»á¬ážá¡ááœáẠá¡áá°áž Docker-based áááºáá±á¬ááºááŸá¯áááºáááºážáá»ááºááᯠááŒááºáááºáá¬ážáá«áááºá
Genode ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº áááºáá±ááŒááŒá®ážáá¬áž microkernels áá»á¬ážááŸáá·áº drivers áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºááŒá®áž drivers áá»á¬ážááᯠuser space ááá¯á·ááŒá±á¬ááºážááá¯ááºá á±ááẠ(áááºážááá¯á·ááááºááŸááá¯á¶á á¶ááœáẠdrivers áá»á¬ážááᯠC ááŒáá·áºáá±ážáá¬ážáá¬ážááŒá®áž Phantom kernel á¡ááá·áºááœááºáá¯ááºáá±á¬ááºáááº)á á¡áá°ážáááŒáá·áºá á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááẠááá¬ážáááºáá¬áá¬á áá¬ážááœáẠáááºááŸááºáá¬ážááá·áº áááºááŸááºáá»ááºáá»á¬ážááŸáá·áº á¡ááŒáá·áºá¡áááá¯ááºáá®ááŒá±á¬ááºáž á¡áááºááŒá¯ááá·áº áááºá¹áá»á¬ááá¯ááºáᬠáá¯á¶ááŒááºá áááºáá»áááŸá¯ááá¯ááºáᬠá áá á áºááŸá¯ááᯠáá¶áá°áá¬ážááá·áº seL4 ááá¯ááºáááá¯áá¬áááºááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá Phantom virtual machine á¡ááœáẠá¡áá¬ážáá° áá¯á¶ááŒááºá áááºáá»áááŸá¯ á¡áá±á¬ááºá¡áá¬ážááᯠááŒááºáááºááá¯ááºááŒá±ááᯠááá·áºááœááºážá ááºážá á¬ážáá±ááŒá®áž OS áááºáááºážáá»ááºáá áºáá¯áá¯á¶ážááᯠá¡áááºááŒá¯ááá¯ááºáááºááŒá áºáááºá
Genode-based port á¡ááœáẠá¡ááá á¡ááá®áá±ážááŸááºáž á§áááá¬ááẠá¡áá»áá¯ážáá»áá¯ážáá±á¬ á ááºááŸá¯áá¯ááºáááºážááŸáá·áº ááŒáŸá¯ááºááœááºážáá¬ážáá±á¬ á ááºáá á¹á ááºážáá»á¬ážá¡ááœáẠá¡ááá®áá±ážááŸááºážáá»á¬áž ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážááŒá áºáááºá áááºááŸáááœááºá virtual machine á¡ááœáẠááŒá±á¬ááºážáá²ááŸá¯á¡á á¯á¶ááᯠááŒááºáááºáá¬ážááŒá®ážááŒá áºááŒá®áž kernel á¡á áááºá¡ááá¯ááºážáá»á¬ážááŸáá·áº áááºáá¡ááá·áºáááá·áº interfaces áá»á¬áž áááºááŸááá±á á±áááºá¡ááœáẠGenode áááááºááœáẠá¡áá¯ááºáá¯ááºáá±á¬ bindings áá»á¬ážááᯠááá·áºááœááºážáá¬ážáááºá Phantom virtual machine ááẠ64-bit Genode áááºáááºážáá»ááºááœáẠá¡áá¯ááºáá¯ááºááá¯ááºáá±ááŒá®áᯠááŸááºáá¬ážáá¬ážááŒá®ážá ááá¯á·áá±á¬áº VM ááᯠááŒá²ááŒá¶áá±á¬áá¯ááºááœáẠá¡áá±á¬ááºá¡áááºáá±á¬áºáááºá driver subsystem ááᯠááŒááºáááºáá¯ááºáá±á¬ááºáááºááŸáá·áº á¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠnetwork stack ááŸáá·áº Genode á¡ááœáẠááááºáá áºááœá²á áá áºááŒáá·áº ááá¯ááºáá»á±á¬áá®ááœá±ááŒá áºá¡á±á¬áẠáá¯ááºáá±á¬ááºááẠááá¯á¡ááºáá±ážáááºá
source: opennet.ru