Il Bash su Ubuntu su Windows consente l'esecuzione di binari ELF64 Linux nativi su Windows tramite il sottosistema Windows per Linux (WSL). Sebbene molte persone siano rimaste scioccate dall'annuncio di Bash su Ubuntu, vale la pena ricordare che apre nuove porte alla compatibilità tra diversi sistemi operativi. Microsoft fa un altro passo avanti e rivela come funziona il suo WSL in modo da poter capire meglio come i due sistemi comunicano tra loro.
WSL è stato creato dal team del kernel di Microsoft Windows e contiene componenti sia in modalità utente che in modalità kernel. In particolare, il sistema è composto da:
- un servizio di gestione della sessione in modalità utente che gestisce il ciclo di vita dell'istanza Linux
- Driver del provider Pico (lxss.sys, lxcore.sys) il cui ruolo è emulare un kernel Linux traducendo le chiamate di sistema Linux
- Processi Pico che ospitano la modalità utente Linux non modificata (ad es. /bin/bash).
Il collegamento tra le tre componenti è descritto come segue:
È lo spazio tra i binari Linux in modalità utente e i componenti del kernel di Windows in cui avviene la magia. Inserendo binari Linux non modificati nei processi Pico, consentiamo alle chiamate di sistema Linux di essere indirizzate al kernel di Windows. I driver lxss.sys e lxcore.sys traducono le chiamate di sistema Linux in API NT ed emulano il kernel Linux.
La sfida principale nel processo è far funzionare insieme i due sistemi:
WSL esegue binari Linux ELF64 non modificati virtualizzando un'interfaccia del kernel Linux sopra il kernel di Windows NT. Una delle interfacce del kernel che espone sono le chiamate di sistema (syscall). Una syscall è un servizio fornito dal kernel che può essere chiamato dalla modalità utente. Sia il kernel Linux che il kernel Windows NT espongono diverse centinaia di chiamate di sistema in modalità utente, ma hanno una semantica diversa e generalmente non sono direttamente compatibili. Ad esempio, il kernel di Linux include cose come fork, open e kill mentre il kernel di Windows NT ha i comparabili NtCreateProcess, NtOpenFile e NtTerminateProcess.
Il sottosistema Windows per Linux include driver in modalità kernel (lxss.sys e lxcore.sys) responsabili della gestione delle richieste di chiamata di sistema Linux in coordinamento con il kernel di Windows NT. I driver non contengono codice dal kernel Linux ma sono invece un'implementazione clean room di interfacce kernel compatibili con Linux. Su Linux nativo, quando viene eseguita una syscall da un eseguibile in modalità utente, viene gestita dal kernel Linux. Su WSL, quando viene effettuata una syscall dallo stesso eseguibile, il kernel di Windows NT inoltra la richiesta a lxcore.sys. Ove possibile, lxcore.sys traduce la syscall di Linux nella chiamata equivalente di Windows NT che a sua volta fa il lavoro pesante.
Tenuto conto dell'interesse di Microsoft per le piattaforme open source, molte persone si sono chiesti se il gigante della tecnologia dovrebbe acquisire importanti aziende focalizzate su Linux come Canonical, la società dietro il sistema operativo Ubuntu. Sebbene Microsoft e Canonical abbiano collaborato su software open source, nessuno dei due ha rilasciato commenti su questa possibilità.
Se sei interessato a come si evolve l'interazione Linux - Windows, vai al blog di Microsoft. Il team ha promesso che sarebbero seguiti altri post sul blog su questo argomento.
STORIE CORRELATE CHE DEVI SCOPRIRE:
- Gli utenti Linux segnalano problemi "Le cuffie hanno smesso di funzionare in Windows 8.1"
- Microsoft e Canonical portano Bash su Windows 10 alla build 2016
- Munich inizia a distribuire CD gratuiti di Ubuntu agli utenti di Windows XP