GCC viert zilveren jubileum
25 jaar geleden bracht Richard Stallman zijn vrije en opensource C-compiler uit. Sindsdien is GCC uitgegroeid tot een kracht van betekenis in de computerindustrie, waarmee vriend en vijand rekening houden.
Het was maart 1987 dat Richard Stallman, initiatiefnemer van het Gnu-project voor een open en vrij Unix-systeem, de eerste openbare release uitbracht van zijn Gnu C Compiler (GCC). Bijna had het pakket Nederlandse wortels gehad: Stallman wilde zijn GCC eigenlijk baseren op de compiler van de VU. Die ondersteunde meerdere doelarchitecturen en zowel C als Pascal - precies wat Stallman beoogde. De beheerders wilden hun compiler echter niet vrijgeven en Stallman koos de compiler van Lawrence Livermore Lab voor Pastel, een Pascal-dialect. Uiteindelijk is ook hiervan geen code in GCC terechtgekomen, want nadat Stallman de compiler had aangepast voor C bleken geheugenbeperkingen ports in de weg te staan en moest hij de rest ook zelf ontwikkelen.
GCC ontketende een revolutie binnen de industrie. De tool werkt voor nop, maar vooral de kwaliteit van de opensource compiler bleek hoog, met name in de ondersteuning van de codestandaarden. Eventuele problemen konden programmeurs bovendien zelf oplossen. En dat is geen overbodige luxe want compilers zijn complexe gereedschappen die optimalisatiestappen zetten waar wel eens een fout in kan sluipen.
De structuur van de GCC-broncode visueel weergegeven. 25 jaar code-evolutie is te zien op bit.ly/GCCevolution.
Maar de echte impact zat ergens anders: GCC betekende ook gelijk een stabiel en hoogkwalitatief platform om producten of diensten te ontwikkelen. De compiler bestaat uit een aantal discrete stappen: het front-end interpreteert de programmeertaal en produceert een tussenrepresentatie, het (officieuze) middle-end voert hier optimalisaties op uit en het back-end zet de beschrijving om naar code voor bijvoorbeeld X86 of Arm. Al snel ontstonden er groepen om te werken aan talen zoals Fortran en Pascal, en later ook Ada, Java en tegenwoordig Go. Ook chipmakers, voor wie tooling geen corebusiness is, omarmden GCC gretig; zij hoeven alleen een beschrijving van de CPU toe te voegen en krijgen daarmee bijna gratis de front-ends en optimalisatiestappen - zolang de CPU niet al te vreemde concepten introduceert althans. In de embedded-wereld is het vandaag de dag vrij gebruikelijk om een GCC-gebaseerde compiler mee te leveren met een embedded CPU of microcontroller. Ten slotte vergelijken aanbieders van commerciële compilers zich er graag mee. ‘Ons product levert in standaard benchmarks dertig procent kleinere code dan opensource tools’, staat er dan in hun persbericht.
In 1989 was er nog een andere partij die business zag in GCC: de start-up Cygnus ging commerciële ondersteuning leveren. Een gratis product betekende echter lage marges, en de enige manier om winst te kunnen maken, was door de moeite voor de support staff zo veel mogelijk te verlagen en te standaardiseren op de toolketen. Dat resulteerde in een enorme bijdrage aan de gebruiksvriendelijkheid van GCC en tools als Autoconf, Automake, Configure en Dejagnu worden nog steeds in één adem genoemd met GCC.
Rustiger vaarwater
Het open model en de bijbehorende aandacht bleken echter ook de nodige frictie op te wekken. De eerste openbare aanvaring was in 1989 tussen de Free Software Foundation, de organisatie achter Gnu en Stallman, en Next Computer van Steve Jobs. Dat laatste had Objective-C als de programmeertaal voor zijn platform geadopteerd en ervoor gekozen om de compiler te baseren op GCC. Jobs wilde het eigen ontwikkelde front-end echter voor zichzelf houden en als bibliotheek met GCC koppelen. De GPL-licentie bleek echter onwrikbaar en na het nodige getouwtrek moest hij de code alsnog vrijgeven. Net als bij Linux en de BSD’s groeide GCC vervolgens uit tot de standaard compiler voor het Next-platform en later Mac OS X.
Maar er speelde meer. In de praktijk bleek de partitionering tussen front-, middle- en back-end niet zo scherp en optimalisaties voor C werkten soms regelrecht in tegen de behoeftes van bijvoorbeeld het Fortran-team. C-ondersteuning was echter het belangrijkste doel van de FSF en de beheerders hadden weinig oog voor de anderen. Na de officiële release moest het Fortran-team dus met patches komen om de compiler te ‘repareren’ voor zijn doeleinden.
Ook was er een groeiend capaciteitsprobleem. Voor het integreren van wijzigingen en toevoegingen was een enkele beheerder verantwoordelijk, maar alleen Cygnus had al een team ontwikkelaars dat een spervuur van aanpassingen op hem afvuurde. Ook de wijzigingen van ontwikkelgroepen voor C++, Fortran, Linux en de Pentium-architectuur bleven jaren liggen. In 1997 liep de frustratie zo hoog op dat deze groepen onder de naam Egcs een eigen ontwikkellijn afsplitsten. Bij andere opensourceprojecten was een open ontwikkelmethode met een publieke repository en mailinglijsten ingeburgerd geraakt en de Egcs-lijn voerde dat ook in voor GCC. De FSF was aanvankelijk niet blij met de afsplitsing, maar de Egcs-methode bleek uiteindelijk zo populair dat zij twee jaar later werd verheven tot de officiële lijn. Egcs werd weer omgedoopt tot GCC, maar met een kleine aanpassing: vanaf dat moment stond de afkorting niet meer voor ‘Gnu C Compiler’, maar voor ‘Gnu Compiler Collection’.
Sindsdien is GCC in rustiger vaarwater gekomen. Hoewel? De laatste jaren is er een geduchte concurrent opgestaan: LLVM, net als GCC opensource, maar opgezet volgens moderne principes met de nodige voordelen boven het ‘archaïsche’ en volgens sommigen logge GCC. Maar het GCC-team is niet van plan zijn ondergang af te wachten. De concurrentie heeft een hoop dingen bespreekbaar gemaakt en de ontwikkelaars zijn hard bezig met een meer modulaire opzet, plug-ins die tijdens het compilatieproces ingrijpen en de overstap van C naar C++ als ontwikkeltaal - net als bij LLVM. Daarmee wil GCC ook bij zijn gouden jubileum relevant zijn.
25 jaar geleden bracht Richard Stallman zijn vrije en opensource C-compiler uit. Sindsdien is GCC uitgegroeid tot een kracht van betekenis in de computerindustrie, waarmee vriend en vijand rekening houden.
Het was maart 1987 dat Richard Stallman, initiatiefnemer van het Gnu-project voor een open en vrij Unix-systeem, de eerste openbare release uitbracht van zijn Gnu C Compiler (GCC). Bijna had het pakket Nederlandse wortels gehad: Stallman wilde zijn GCC eigenlijk baseren op de compiler van de VU. Die ondersteunde meerdere doelarchitecturen en zowel C als Pascal - precies wat Stallman beoogde. De beheerders wilden hun compiler echter niet vrijgeven en Stallman koos de compiler van Lawrence Livermore Lab voor Pastel, een Pascal-dialect. Uiteindelijk is ook hiervan geen code in GCC terechtgekomen, want nadat Stallman de compiler had aangepast voor C bleken geheugenbeperkingen ports in de weg te staan en moest hij de rest ook zelf ontwikkelen. GCC ontketende een revolutie binnen de industrie. De tool werkt voor nop, maar vooral de kwaliteit van de opensource compiler bleek hoog, met name in de ondersteuning van de codestandaarden. Eventuele problemen konden programmeurs bovendien zelf oplossen. En dat is geen overbodige luxe want compilers zijn complexe gereedschappen die optimalisatiestappen zetten waar wel eens een fout in kan sluipen.
De structuur van de GCC-broncode visueel weergegeven. 25 jaar code-evolutie is te zien op bit.ly/GCCevolution.
Maar de echte impact zat ergens anders: GCC betekende ook gelijk een stabiel en hoogkwalitatief platform om producten of diensten te ontwikkelen. De compiler bestaat uit een aantal discrete stappen: het front-end interpreteert de programmeertaal en produceert een tussenrepresentatie, het (officieuze) middle-end voert hier optimalisaties op uit en het back-end zet de beschrijving om naar code voor bijvoorbeeld X86 of Arm. Al snel ontstonden er groepen om te werken aan talen zoals Fortran en Pascal, en later ook Ada, Java en tegenwoordig Go. Ook chipmakers, voor wie tooling geen corebusiness is, omarmden GCC gretig; zij hoeven alleen een beschrijving van de CPU toe te voegen en krijgen daarmee bijna gratis de front-ends en optimalisatiestappen - zolang de CPU niet al te vreemde concepten introduceert althans. In de embedded-wereld is het vandaag de dag vrij gebruikelijk om een GCC-gebaseerde compiler mee te leveren met een embedded CPU of microcontroller. Ten slotte vergelijken aanbieders van commerciële compilers zich er graag mee. ‘Ons product levert in standaard benchmarks dertig procent kleinere code dan opensource tools’, staat er dan in hun persbericht. In 1989 was er nog een andere partij die business zag in GCC: de start-up Cygnus ging commerciële ondersteuning leveren. Een gratis product betekende echter lage marges, en de enige manier om winst te kunnen maken, was door de moeite voor de support staff zo veel mogelijk te verlagen en te standaardiseren op de toolketen. Dat resulteerde in een enorme bijdrage aan de gebruiksvriendelijkheid van GCC en tools als Autoconf, Automake, Configure en Dejagnu worden nog steeds in één adem genoemd met GCC.Rustiger vaarwater
Het open model en de bijbehorende aandacht bleken echter ook de nodige frictie op te wekken. De eerste openbare aanvaring was in 1989 tussen de Free Software Foundation, de organisatie achter Gnu en Stallman, en Next Computer van Steve Jobs. Dat laatste had Objective-C als de programmeertaal voor zijn platform geadopteerd en ervoor gekozen om de compiler te baseren op GCC. Jobs wilde het eigen ontwikkelde front-end echter voor zichzelf houden en als bibliotheek met GCC koppelen. De GPL-licentie bleek echter onwrikbaar en na het nodige getouwtrek moest hij de code alsnog vrijgeven. Net als bij Linux en de BSD’s groeide GCC vervolgens uit tot de standaard compiler voor het Next-platform en later Mac OS X. Maar er speelde meer. In de praktijk bleek de partitionering tussen front-, middle- en back-end niet zo scherp en optimalisaties voor C werkten soms regelrecht in tegen de behoeftes van bijvoorbeeld het Fortran-team. C-ondersteuning was echter het belangrijkste doel van de FSF en de beheerders hadden weinig oog voor de anderen. Na de officiële release moest het Fortran-team dus met patches komen om de compiler te ‘repareren’ voor zijn doeleinden. Ook was er een groeiend capaciteitsprobleem. Voor het integreren van wijzigingen en toevoegingen was een enkele beheerder verantwoordelijk, maar alleen Cygnus had al een team ontwikkelaars dat een spervuur van aanpassingen op hem afvuurde. Ook de wijzigingen van ontwikkelgroepen voor C++, Fortran, Linux en de Pentium-architectuur bleven jaren liggen. In 1997 liep de frustratie zo hoog op dat deze groepen onder de naam Egcs een eigen ontwikkellijn afsplitsten. Bij andere opensourceprojecten was een open ontwikkelmethode met een publieke repository en mailinglijsten ingeburgerd geraakt en de Egcs-lijn voerde dat ook in voor GCC. De FSF was aanvankelijk niet blij met de afsplitsing, maar de Egcs-methode bleek uiteindelijk zo populair dat zij twee jaar later werd verheven tot de officiële lijn. Egcs werd weer omgedoopt tot GCC, maar met een kleine aanpassing: vanaf dat moment stond de afkorting niet meer voor ‘Gnu C Compiler’, maar voor ‘Gnu Compiler Collection’. Sindsdien is GCC in rustiger vaarwater gekomen. Hoewel? De laatste jaren is er een geduchte concurrent opgestaan: LLVM, net als GCC opensource, maar opgezet volgens moderne principes met de nodige voordelen boven het ‘archaïsche’ en volgens sommigen logge GCC. Maar het GCC-team is niet van plan zijn ondergang af te wachten. De concurrentie heeft een hoop dingen bespreekbaar gemaakt en de ontwikkelaars zijn hard bezig met een meer modulaire opzet, plug-ins die tijdens het compilatieproces ingrijpen en de overstap van C naar C++ als ontwikkeltaal - net als bij LLVM. Daarmee wil GCC ook bij zijn gouden jubileum relevant zijn.Dit artikel is gratis te lezen voor geregistreerde gebruikers.
Bent u nog niet geregistreerd? Vraag dan gratis een account aan.



