Webassembly, de toekomst van het web?

Door elhopo op donderdag 23 augustus 2018 00:02 - Reacties (11)
Categorie: Internet, Views: 4.256

https://webassembly.org/css/webassembly.svg

Geschiedenis
In de begintijd van het internet was er alleen maar html. De eerste pagina
bestond uit wat tekst en enkele linkjes. Meer was er ook niet mogelijk. De standaard werd langzamerhand wat uitgebreid, en naarmate er meer mogelijk was werden de pagina’s ook uitgebreider. Toch miste er wat, de pagina’s waren niet erg dynamisch.
Rond 1995 werd hiervoor Javascript bedacht. Met Java als inspiratie werd Javascript geboren. De naam is gekozen om mee te liften op het succes van Java, en op die manier een snelle acceptatie van het publiek te krijgen. Het werd een groot succes, en tot op heden duurt het succes nog steeds voort. In de loop der jaren is het uitgebreid en aangepast, maar toch heeft het zijn tekortkomingen en daarom zijn de grote technologiebedrijven op zoek gegaan naar een aanvulling.

Wat is Webassembly?
Webassembly is een soort virtuele machine, die draait in de browser. Deze machine kan je dan gebruiken in de belangrijkste browsers, Firefox, Chrome, Safari en Edge. De afgelopen tijd hebben alle fabrikanten hier ondersteuning voor toegevoegd. Klinkt mooi, maar wat betekent dat? WebAssembly bestanden(WASM) kunnen door browsers worden binnengehaald, en als bytecode worden uitgevoerd, om near-native te draaien. Het idee is dat ontwikkelaars een applicatie die bijvoorbeeld C of C++ is geschreven naar WebAssembly kunnen compileren, zodat deze in de browser kan worden gedraaid. Om dan een programma te draaien heb je alleen maar de link nodig naar het programma. Verder niets. De browser haalt het bestand op en voert het uit in de virtuele machine. Het werkt verder onder de meeste besturingssystemen. Hmm, waar hebben we dat eerder gehoord? Java servlets? Flash? Allemaal soortgelijke initiatieven, maar ze bleken op den duur zo onveilig dat besloten is er weer vanaf te stappen. Hoe is dit anders dan? Volgens de documenten hierachter werkt het in een gesandboxte (is dat een woord?) omgeving. Net als in een zandbak met hoge muren kan je er dus niet uitkomen en kan je alleen spelen met het zand wat in de bak zit.

Wat kan je er nou mee?
Wellicht eerst wat voorbeelden.
tanks
Tanks!
Dit is Tanks, een spel wat wordt beschreven in een Unity tutorial. Dit spel is geŽxporteerd naar Webassembly. Je kan met z’n tweeŽn spelen, de blauwe tank kan je besturen met WASD en schieten met de spatiebalk, de rode tank kan je besturen met de pijltjestoetsen en schieten met enter.
zen
Een ander voorbeeld is de Epic zen garden
Let wel op, laden en starten duurt heel even. Hierna is het alsof je een lokaal geÔnstalleerd spel speelt.

Veel bedrijven gebruiken een programmeertaal als C++ voor het maken van hun software. Om dergelijke functionaliteit te ontwikkelen voor het web in Javascript is vaak erg tijdrovend. Bedenk maar eens hoeveel tijd het zou kosten om Autocad te maken voor het web. Door nu Webassembly te gebruiken kunnen bedrijven zoals de makers van Autocad veel code hergebruiken, en zo op de kosten sparen.
Andere bedrijven hebben bijvoorbeeld veel software in Javascript geschreven. Browsers zijn de laatste jaren steeds sneller geworden in het uitvoeren van Javascript, maar ondanks alle performance verbeteringen is het nog lang niet zo snel als een native programma. Denk bijvoorbeeld aan gezichtsherkenning. Met Javascript is een snelheid van 1 beeld per seconde te halen, terwijl met Webassembly op dezelfde machine 15 beelden per seconde te halen is. Allemaal prima resultaten. Ook een update van een programma is veel makkelijker te installeren. De beheerder hoeft niet alle computers langs, enkel de server moet worden geupdate.

Betekent dit dan het einde van Javascript?
Nee, aldus de organisaties erachter. Webassembly en Javascript zijn bedoeld om naast elkaar te gebruiken. Vanuit Javascript kan je dus Webassembly aanroepen en andersom. Sommige dingen zijn wat makkelijker te doen vanuit Javascript, zoals DOM manipulatie, het veranderen van hoe je webpagina eruit ziet of de inhoud ervan. Zoals ze zelf aangeven: Javascript is here to stay!

Voordelen
  • Webassembly is efficient en snel. Omdat het al gecompileerd is hoeft de browser dat niet zelf te doen. Ook de bestanden zijn kleiner, omdat niet de broncode wordt gebruikt maar het gecompileerde eindresultaat.
  • Er is een open standaard, zodat iedereen er gebruik van kan maken. Momenteel kunnen via de officieele weg alleen C, C++ en RUST als programmeertaal worden gebruikt, maar er zijn al opensource partijen die bijvoorbeeld Java ondersteunen. Later zullen meer talen officieel ondersteund gaan worden. Een voorbeeld hiervan is Teavm, die zelfs een online editor hebben waar je wat in kan proberen: http://teavm.org/sandbox/index.html . Bij de Examples afdeling zijn zelfs wat grafische voorbeelden te vinden. Microsoft is ook bezig met een C# versie
  • Webassembly is erg veilig. Door de gesandboxte omgeving en de virtual machine constructie zouden beveiligingsproblemen tot het verleden moeten horen
  • Webassembly is zelfs in de browser te debuggen. Vaak is dat lastig bij gecompileerde code, maar hier is speciaal rekening mee gehouden. Hierdoor is het ontwikkelen ervan ook makkelijker.
Nadelen
  • Door de sandbox omgeving kan je simpelweg niet alles lokaal benaderen. Dat wil je ook niet, niet iedere webapplicatie mag bijvoorbeeld in je email of in je documenten kijken. Je kan wel, net als op het web, een bestand uploaden, maar niets zonder expliciete toestemming. Echter kan het soms onhandig zijn.
  • Dan de assembly’s zelf. Ze zijn weliswaar gecompileerd, maar nog steeds leesbaar. Hierdoor is het iets makkelijker om code te lezen, en bijvoorbeeld software te kraken. Gelukkig is code dan wel weer te beveiligen.
  • De code is niet zo snel als native code. Mocht de code echt optimaal moeten presteren dan zal je een gewone applicatie moeten installeren.
  • Niet alle platformen worden volledig ondersteund. Op mijn IPhone kan ik bijvoorbeeld de Epic zen garden demo niet bekijken.
De toekomst
Webassembly is nog volop in ontwikkeling. Enkele belangrijke dingen die er aan komen zijn multithread ondersteuning. Hierdoor kan de applicatie beter gebruik maken van de aanwezige cores in je processor. Een andere belangrijke ontwikkeling is ondersteuning van een garbage collector. Dit is tevens waarom momenteel alleen C, C++ en Rust worden ondersteund. Deze talen hebben geen garbage collector. Wat een garbage collector doet: Tijdens het programmeren gebruik je allerlei variabelen om even wat in op te slaan. In talen zonder de garbage collector moet de programmeur deze zelf weer opruimen als hij ze niet meer gebruikt. Talen met een garbage collector, zoals Java doen dit automatisch. Wanneer een onderdeel nergens vandaan meer gebruikt wordt, is deze dus niet meer nodig en wordt deze opgeruimd.

Tot slot
Het is afwachten of Webassembly echt zo veilig is als dat men zegt. Helaas komen we daar pas na verloop van tijd achter. In het verleden bleek dat Java en Flash toch niet zo veilig was als gedacht. Wat wel een verschil is met het verleden is dat er nu grote namen achter staan, zoals Google, Mozilla, Apple en Microsoft. Mijn verwachting is dat het net zo’n revolutie teweeg zal brengen als destijds Javascript deed. We zullen er in de toekomst nog veel van horen! Meer weten? Hier kan je alles vinden: https://webassembly.org/