# Platform (informatica)

Een platform is in de ICT een basis waarop software ontwikkeld wordt. De bekendste platformen zijn:
* Java, .NET
* Windows, Linux, Mac
* LAMP

## Het platform-idee van software-ontwikkeling

Om goed het principe van een platform te begrijpen, is het nodig om te begrijpen wat platformloze software-ontwikkeling inhoudt. In dit hoofdstuk kijken we eerst naar de "originele" manier van software-ontwikkeling; daarna beschouwen we wat het ontwikkelen op basis van een platform toevoegt.

## Originele software-ontwikkeling

De traditionele manier van software-ontwikkeling heeft zich gedurende een aantal decennia ontwikkeld na de introductie van de eerste elektronische computers in de jaren 40. De eerste computers werden bediend door het invoeren in elektronische vorm van commando's die direct door de processor van de computer uitgevoerd konden worden.
Na 1945 werden geleidelijk aan mechanismes ontwikkeld om het invoeren van commando's makkelijker te maken. Eerst kwamen de hardware-hulpmiddelen (toetsenborden en monitoren), snel gevolgd door de eerste programmeertalen en besturingssystemen. Een programmeertaal is een middel om commando's op te stellen voor een processor door gebruik te maken van een syntaxis die door mensen te begrijpen is, in plaats van gebruik te maken van de syntaxis die direct leesbaar is door de processor. Een besturingssysteem is een programma dat de functies van de onderliggende hardware makkelijk toegankelijk maakt voor derde partijen – gebruikers of software.
Met het verloop van de jaren werden zowel programmeertalen als besturingssystemen uitgebreid om de basisfunctionaliteit van de hardware makkelijker toegankelijk te maken voor ontwikkelaars van software. Onder meer werden modernere programmeertalen uitgebreid met meer abstracte functionaliteit om met minder moeite meer te kunnen doen en werden besturingssystemen voortdurend uitgebreid met ondersteuning voor verschillende hardware die zelf ook steeds meer mogelijkheden bood. Daarnaast werden ook meer en meer algoritmes en datastructuren ontwikkeld als "standaardoplossingen" om in een gegeven programmeertaal resultaten te bereiken.

## Van basis tot platform

Hoewel de beschikbare software voor de ondersteuning van het ontwikkelen van software gaandeweg over meer en meer mogelijkheden kwam te beschikken en het abstractie-niveau van met name de programmeertalen toenam, bleef het lange tijd zo dat alles wat meer dan het basisniveau was van hardwarebediening per programma door de programmeur zelf geschreven moest worden. De introductie van de muis, bijvoorbeeld, maakte het makkelijker om de computer te bedienen. En al snel werd de muis geïntegreerd in het besturingssysteem, in die zin dat de meeste besturingssystemen het mogelijk begonnen te maken om de bewegingen van een muis te volgen door middel van in het besturingssysteem ingebouwde ondersteuning. Dat wilde echter niet zeggen dat ieder programma dan maar meteen met de muis bediend kon worden -- hoewel het voor programmeurs mogelijk werd om te letten op het bedienen van de muis door de gebruiker, moest ieder programma nog altijd omgebouwd worden om op de muis te reageren. Dat wil zeggen, ieder programma kon te allen tijde opvragen of er veranderingen waren opgetreden in de positie van de muis door te luisteren naar elektronische signalen die vanuit de muis bij de computer binnen kwamen -- het vertalen van die signalen in een "beweging" en het weergeven daarvan aan de gebruiker (bijvoorbeeld door middel van een cursor) moest de gebruiker zelf doen. En dit moest per programma gebeuren en voor ieder programma opnieuw.
Hetzelfde gebeurde na de introductie in de personal computer van grafische hardware die het mogelijk maakte om mooie plaatjes op het scherm te toveren. Hiermee werd het mogelijk om programma's te voorzien van grafische interfaces. Dat wil zeggen, programma's konden de hardware instrueren om gekleurde lijnen op het scherm te zetten om het scherm, lijn voor lijn, te vullen met kleuren totdat het geheel een grafische interface voor de gebruiker werd. Ook deze moeite moest per programma opnieuw uitgevoerd worden.
Kortom, hoewel de programmeertalen steeds abstracter werden, bleef het eeuwige en steeds erger wordende probleem van de originele manier van software schrijven dat de nieuwe mogelijkheden veel sneller toenamen dan behapstukt kon worden door enkele programmeurs die van basis-programmeertalen gebruik maakten.
Sinds halverwege de jaren 70 werd op dit groeiende probleem gereageerd vanuit de ICT-gemeenschap door systemen te introduceren waarin gaandeweg steeds meer vaak voorkomende taken in de vorm van herbruikbare code beschikbaar werden. Dit begon met de introductie van software-bibliotheken: verzamelingen van vaak voorkomende stukken code die hergebruikt konden worden -- bijvoorbeeld door knip- en plakwerk, of later door bij het compileren het hergebruiken automatisch te laten verlopen, simpelweg via een commando om een bepaald stuk voorgedefinieerde code te gebruiken. Uiteraard ondergingen ook deze bibliotheken een steeds verdergaande ontwikkeling en abstractie. Was een grafische bibliotheek eerst iets waarin bijvoorbeeld code te vinden was om een ingekleurde driehoek op het scherm te tekenen (in plaats van deze zelf helemaal op te hoeven bouwen), modernere grafische bibliotheken bestaan uit complexe stukken code die hele knoppen, dialogen en vensters op het scherm kunnen produceren met een hele rits opties erbij ter configuratie van het geproduceerde object.
Uiteraard ontstonden er vele en verschillende van dergelijke hulpmiddelen. Soms onderling concurrerend op het gebied van een bepaald probleem (er zijn vele grafische bibliotheken beschikbaar), soms sterk specialiserend op een bepaald doel (niet zomaar een grafische bibliotheek, maar een grafische bibliotheek voor gebruik op het besturingssysteem).
De grote diversiteit en doorgaande ontwikkeling in hulpsystemen zorgde er al snel voor dat niemand in staat was om een overzicht over het geheel te houden. Sinds het midden van de jaren 80 is het dan ook gebruikelijk dat software-ontwikkelaars zich specialiseren in het gebruik van een bepaalde verzameling van hulpmiddelen -- een programmeur schrijft bijvoorbeeld niet zomaar eens software, hij is bijvoorbeeld gespecialiseerd in het schrijven van software die draait op het Windows besturingssysteem -- en hij is dan ook zeer bekend met het gebruik van de grafische bibliotheek, de hogere niveau muisroutines, de netwerkondersteuning enzovoorts die geboden worden door Windows, maar niet noodzakelijk bekend met dezelfde faciliteiten als ze op een andere manier aangeboden worden.
Uit de hierboven beschreven trend zijn zogeheten ontwikkelplatforms ontstaan: ver doorontwikkelde verzamelingen van hulpmiddelen die de ontwikkelaar van software in verregaande mate ondersteunen bij het schrijven van software door het aanbieden van allerhande functionaliteit in de vorm van kant en klare, herbruikbare blokken.

## Trends in platforms

Zoals het idee van een ontwikkelplatform zelf uit een trend ontstaan is, zo zijn platforms zelf ook altijd aan trends onderhevig geweest. De voornaamste trends die de ontwikkeling van platforms vorm gegeven hebben, zijn abstractie en veelomvattendheid.

### Abstractie

Een van de duidelijkste trends in de ontwikkeling van het platformprincipe is de vergroting van de afstand van de programmeur tot de hardware. Was het ooit zo dat een programmeur voor alles wat hij deed direct de hardware moest aansturen door middel van grote aantallen zeer simpele instructies op hardware niveau (of dicht tegen dat niveau aan), tegenwoordig behoort het tot de voornaamste functie van ieder platform om ervoor te zorgen dat een programmeur in één enkele instructie een hele, complexe actie uit kan voeren (het tekenen van een venster in een grafische interface in vol ornaat, het openen en gebruiken van een netwerkconnectie, etc.). Het idee hierachter is dat een programmeur zich zo veel mogelijk kan concentreren op de specifieke taak die hij uit wil voeren in plaats van zeer veel tijd te verdoen aan het uitcoderen van zeer vaak voorkomende en dus saaie stukken code. Dit heeft bovendien (hopelijk) het voordeel dat de ontwikkeltijd van stukken software omlaag gaat en daarmee ook de kosten. En bovendien voorkomt het hergebruik van eenmaal ontwikkelde en betrouwbaar bevonden stukken code het ontstaan van eindeloze fouten in vaak voorkomende stukken code die anders steeds opnieuw geschreven zouden moeten worden.

### Veelomvattendheid

Een andere trend binnen de platformontwikkeling is zonder enige twijfel ook die om steeds meer functionaliteit in één platform aan te bieden, zodat een programmeur meer en meer kan zonder hulpmiddelen van "buitenaf". Was een platform vroeger bijvoorbeeld zoiets als de C-taal in combinatie met de wxWindows grafische bibliotheek, tegenwoordig omvat een beetje platform hulpmiddelen voor het opzetten van grafische interfaces, het regelen van de bediening ervan (middels toetsenbord, muis, joystick, touchscreen, enzovoorts en uiteraard netjes geabstraheerd tot een "bedieningshandeling" zodat de programmeur zich niet hoeft te bekommeren om welk apparaat precies gebruikt wordt om de interface te bedienen), het opzetten van netwerk- of Internet-verbindingen, het omgaan met bestanden in allerlei formaten (met name XML), wiskunde-functies, het omgaan met verzamelingen en andere abstracte datatypes, en het omgaan met multimedia-onderdelen.
Als onderdeel van deze trend kan het ontstaan gezien worden van platforms die een zeer gespecialiseerde, sterk geïntegreerde, verticale kolom vormen vanuit de programmeur naar ondergelegen niveaus, soms tot op hardware niveau. Bekende voorbeelden hiervan zijn het Wintel-platform (waarin de programmeur zich specialiseert in het programmeren en gebruik van Windows op de Intel-familie van processoren voor desktop applicaties), het Gnu/Linux/Qt/KDE platform (een directe concurrent van Wintel op basis van Linux, Gnu software, de QT bibliotheek en de KDE omgeving) en LAMP (Linux, Apache, MySql, PHP -- een platform dat zich richt op het ontwikkelen van web-applicaties). Een bijzondere positie hierin wordt ingenomen door het Java platform (dat zich specifiek richt op de JVM machine als onderliggende computer -- maar waarin de JVM een abstracte computer is die in software wordt uitgevoerd, waarmee het platform uitwisselbaar wordt over alle fysieke hardware heen) en de J2EE uitbreiding hierop (J2EE is dan weer een platform gericht op de ontwikkeling van zakelijke applicaties in een netwerkomgeving). Het openen van de lagergelegen platformlagen voor algemene toegang om zo een "platform-platform" te bouwen (zoals Java met de JVM doet) zou ook best een nieuwe trend kunnen worden. Het concurrerende .Net-platform van Microsoft is, met een andere insteek, op hetzelfde idee gebaseerd.

## Platform en gemeenschap

Een laatste "onderdeel" waarover een platform tegenwoordig moet beschikken om zich met recht een platform te kunnen noemen, is een "community" -- een gemeenschap van gebruikers die op zijn minst gespecialiseerd zijn in het gebruik van dat platform en dat platform voor vrijwel al hun dagelijkse ontwikkelwerk gebruiken. Het ideaal is echter de situatie waarin de gebruikers niet alleen gespecialiseerd zijn, maar vooral ook actief betrokken zijn bij hun platform. In deze situatie ontstaat namelijk een platform met een zeer dynamische aard, waarin de verdere ontwikkeling van het platform gevoed wordt door de wensen, ideeën en uitvindingen van de gebruikers (de leden van de gemeenschap) en niet alleen door de trends van buiten. Een platform met een levendige gebruikersgemeenschap heeft veel meer mogelijkheden om een trendsetter van technologische ontwikkelingen te worden in plaats van alleen maar een volger. Bovendien helpt een actieve gemeenschap een platform makkelijker ingang vinden in algemene software-ontwikkeling, zowel door de beschikbaarheid van specialisten als door de aanwezigheid van mensen die het platform aan kunnen dragen als oplossing voor een bestaand probleem.
Ten slotte zorgt een gemeenschap ook voor groei van een platform in de vorm van aanwas van nieuwe gebruikers -- een actieve en groeiende gemeenschap geeft aanleiding tot het opzetten van diverse en makkelijk toegankelijke opleidingen voor gebruikers die met het platform willen beginnen en is ook een bron van ondersteuning voor nieuwe gebruikers, zowel via traditionele congressen en gebruikersgroepen als via moderne vraagbaken als het Internet. Hiermee tekent zich ook een derde trend in platformontwikkeling af: de trend dat het platform meer en meer ook een sociaal karakter krijgt, naast een technisch en zakelijk karakter.