Uveden port kernela Linux za WebAssembly, koji se izvršava u pregledniku

Na mailing listi programera kernela Linux Objavljene su zakrpe koje implementiraju Wasm arhitekturu za kernel. Linux, što omogućava kompajliranje kernela u WebAssembly međukod za naknadno direktno izvršavanje u web pregledniku bez upotrebe emulatora. Osim toga, za kernel Linux проектом реализована возможность запускать исполняемые файлы в формате «.wasm» и подготовлен драйвер «web console» для симуляции работы с консолью в браузере. Также подготовлен инструментарий для упрощения сборки запускаемых в браузере системных окружений.

Kao primjer, okruženje je kreirano korištenjem paketa uslužnih programa BusyBox i sistemske biblioteke musl kompajlirane u WebAssembly. Xterm.js se koristi kao emulator terminala za rad s ovim okruženjem. Pokrenuta je zasebna demo stranica koja korisnicima omogućava da procijene port bez samostalnog kompajliranja. Deklarisana je puna podrška za preglednike bazirane na Chromiumu i djelomična podrška za Firefox, koji ima ograničene mogućnosti otklanjanja grešaka. Na modernim računarima, učitavanje Wasm kernela u preglednik traje manje od sekunde.

Projekat je u razvoju oko dvije godine i trenutno omogućava učitavanje kernela u pretraživače i izvršavanje standardnih programa. Rad još nije završen, a port ima neke probleme i ograničenja. Na primjer, podrška za vfork i longjmp pozive još nije implementirana (BusyBox je zakrpan da radi bez njih), ne postoji mogućnost prekidanja zadataka, MMU nije dostupan (kernel i procesi se izvršavaju u istom adresnom prostoru), nemoguće je modificirati već učitani kod, a konzola se zamrzava nakon otprilike 5 minuta zbog problema s tajmerom. Napominje se da su postojeća ograničenja savladiva, ali neka od njih zahtijevaju implementaciju dodatnih proširenja za WebAssembly u pretraživačima. Slična proširenja su predložena za MMU i suspenziju niti.

Nemogućnost pauziranja izvršavanja niti u WebAssembly-ju je u sukobu sa planerom zadataka kernela, ali je multitasking implementiran putem zaobilaznog rješenja dodjeljivanjem svakoj niti/zadatku vlastitom virtuelnom CPU-u, izvršavanom u odvojenom Web Workeru. Ovaj pristup je omogućio paralelno izvršavanje procesa korištenjem pretraživačkog mehanizma i kernela glavnog operativnog sistema, bez pribjegavanja preventivnom multitaskingu ili prebacivanju zadataka u kernelu pretraživača. Prekidi i signali nisu u potpunosti funkcionalni u ovoj postavci, a zaseban virtuelni CPU se koristi za isporuku prekida tajmera i IPI (Inter-Processor Interrupt).

Область применения проекта выходит за рамки простого запуска Linux-окружений в браузерах. Например, порт может применяться для создания многоплатформенных WebAssembly программ, использующих специфичные для Linux системные вызовы. Реализация подобных системных вызовов может быть отдельно преобразована в WebAssembly и прикреплена к приложению, что позволит использовать его без привязки к системному ядру. Порт также будет полезен для организации изолированного выполнения приложений при помощи WASI (WebAssembly System Interface).

Planovi uključuju eksperimente s implementacijom grafičke podrške u okruženjima s jezgrom izgrađenom u WebAssemblyju. Planiraju implementirati EGL i podržati OpenGL ES koristeći WebGL API preglednika. Također planiraju implementirati podršku za Dwarf debug format za debugiranje koda liniju po liniju.

izvor: opennet.ru

Kupite pouzdan hosting za sajtove sa DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan web hosting sa DDoS zaštitom, VPS VDS servere | ProHoster