Er is een essentieel verschil tussen de manieren waarop WSL 1 en 2 platformoverschrijdende toegang realiseert, een bestand kan delen en omgevingen in een netwerk kan verbinden. Deze serie artikelen laat niet alleen zien wat het betreffende subsysteem doet bij de verschillende Windows-versies, maar ook enkele leuke mechanismen die in alle moderne Windows-versies zitten.
Bestand delen in WSL
Een essentieel verschil tussen WSL1 en 2, dat Microsoft ook zeer duidelijk heeft gedocumenteerd, is de manier waarop platformoverschrijdende bestandstoegang gerealiseerd wordt. WSL2 slaat alle Linux-bestanden samen met die van de distributie op in een VHDX-bestand in de gebruikersprofielmap (in C:\Gebruikers\<naam>).
De toegang tot die database vanuit WSL is uiterst snel. Om de Windows-stations toegankelijk te maken onder Linux, koppelt WSL2 ze aan in de Linux bestandsstructuur onder /mnt.
Mounten voor bestand delen in WSL
Om ze te mounten, gebruikt het een speciale toegangstechniek om ervoor te zorgen dat concurrerende toegangen van Windows en Linux het bestandssysteem niet beschadigen (het mounten van een apparaat onder beide systemen tegelijk zou dat bij conflicten kunnen veroorzaken).
Het gaat om de voor het experimentele besturingssysteem Plan 9 ontworpen 9P. WSL2 zelf fungeert daarbij als de server, Windows als een client. Benchmarks tonen aan dat toegang tot bestanden van een NTFS-bestandssysteem dat op die manier wordt benaderd vanuit Linux veel trager is. Hoe meer kleine bestanden er worden verwerkt, des te groter het effect.
De conclusie die daaruit kan worden getrokken is heel duidelijk:
- Als gezamenlijke toegang door Windows en Linux tot een grote voorraad kleine bestanden nodig is, dan is WSL1 aan te bevelen.
- Bestanden die hoofdzakelijk onder Windows worden bewerkt, moeten worden opgeslagen op een NTFS-volume met WSL2,
- Bestanden die hoofdzakelijk onder Linux worden bewerkt, moeten idealiter worden opgeslagen in het Linux-bestandssysteem (niet onder /mnt), oftewel in het VHDX-bestand.
Zelfs als Windows die bestanden standaard niet mount, kan toegang worden gerealiseerd. Ook daar komt 9P om de hoek kijken: Microsoft heeft een module toegevoegd aan Visual Studio Code die op die manier bestanden in het Linux-bestandssysteem kan benaderen.
Ontvang gratis meer workshops over Windows en Linux!
Schrijf je in voor de nieuwsbrief:
Netwerk verbinding in WSL
De netwerkverbinding van de Linux-omgevingen verschilt afhankelijk van de WSL-versie. WSL1 voegt die omgevingen samen bij de netwerkkaart van de pc – oftewel Linux en Windows delen de IPv4- en IPv6-adressen. Daardoor is het hardware-ethernetadres (MAC) dat in de Linux-omgevingen wordt weergegeven identiek aan dat in Windows.
Dat maakt diensten die binnen WSL draaien toegankelijk, bijvoorbeeld een webserver. Als een Linux-toepassing een poort opent, vraagt Windows onmiddellijk of het een firewall-poort moet openen.
WSL2 geeft ook alle draaiende omgevingen een identiek IPv4-adres, maar leidt dat niet af van dat van de pc. In plaats daarvan komt het uit de adrespool van een virtuele schakelaar genaamd WSL. Die is ook zichtbaar wanneer WSL2-omgevingen worden uitgevoerd nadat de Hyper-V-beheertools en -services geïnstalleerd zijn.
IPv4 netwerk delen in WSL 2
Alle WSL2-omgevingen delen dan een ip-adres van een particulier IPv4-netwerk. Ze krijgen geen IPv6-adressen. Het Windows-onderdeel voor het delen van een internetverbinding (Internet Connection Sharing, ICS) is actief op de virtuele switch.
Netwerktoegang van buitenaf tot diensten die in een WSL2-omgeving draaien is daarom moeilijker.
Daarover zijn lange discussies gaande in de WSL-bugtracker, die allerlei problemen aan het licht brengen (zie de link onderaan deze pagina).
Aangezien een omgeving bij elke Windows- en WSL-herstart een ander ip-adres krijgt toegewezen, zijn statische portforwarding via netsh (met netsh interface portproxy add) en uitzonderingen bij de Windows-firewall niet voldoende om services in de Linux-omgevingen permanent toegankelijk te maken. Maar zoals gezegd, dat was het doel van Microsoft ook niet.
De voordelen van WSL
WSL laat zijn voordelen zien op de plekken waar Windows-gebruikers in contact komen met Linux-omgevingen. Dat geldt vooral voor ontwikkelaars die Visual Studio Code gebruiken om bijvoorbeeld Docker-containers te bouwen. Zolang ze niet te veel afhankelijkheden bevatten, is een laptop voldoende om het hele lab dat nodig is voor het testen mee te slepen. Na een tijdje merk je niet eens meer op welk besturingssysteem je werkt.
Dat is wat de WSL-aanpak onderscheidt van conventionele virtualisatietechnologie. Theoretisch kan dit alles ook met virtuele machines, maar de benodigde inspanning is daarbij veel groter. Je moet de virtuele machines aanmaken, nadenken over de te verdelen resources en zelf opruimen. Dat kun je alleen doen met de Pro-versie van Windows. WSL is ook beschikbaar bij Windows Home en zelfs in de ARM-versie (op voorwaarde dat de hardware virtualisatie toelaat, wat niet voor elk ARM-apparaat geldt).
Meer over Windows Subsystem for Linux – WSL 1 en 2 – vind je in:
- Windows Subsystem for Linux installeren met commandline
- Windows Subsystem for Linux – een kijkje in de virtuele machine
- Windows Subsystem for Linux WSL – geschiedenis en huidige gebruik
(Deze informatie is afkomstig uit het artikel van Peter Siering en Noud van Kruysbergen, en verscheen eerder in c’t 3, 2022, p120)