Geschichte von Nette

Die Ursprünge von Nette reichen ins Jahr 2004 zurück, als sein Autor David Grudl nach einem geeigneten Framework zum Schreiben von Anwendungen suchte, weil reines PHP nicht mehr ausreichte. Keine der damals verfügbaren Lösungen entsprach seinen Vorstellungen, und so begann er nach und nach die Eigenschaften eines neuen Frameworks zu umreißen, das später den Namen Nette erhielt.

Moderne Frameworks wie Symfony, Laravel oder Ruby on Rails gab es damals noch nicht. In der Welt von Java war JSF (JavaServer Faces) der Standard, in der konkurrierenden Welt von .NET herrschte ASP.NET WebForms. Beide erlaubten es, Seiten aus wiederverwendbaren UI-Komponenten zusammenzusetzen. Die Art ihrer Abstraktion und der Versuch, über dem zustandslosen Protokoll HTTP mit Hilfe von Sessions oder sogenannten Postbacks Zustandsbehaftung vorzutäuschen, hielt David allerdings für verfehlt und grundlegend kaputt. Sie verursachten für Anwender und Suchmaschinen zahlreiche Schwierigkeiten. Hatten Sie sich zum Beispiel einen Link gespeichert, wunderten Sie sich später womöglich, dass sich darunter ein anderer Inhalt fand.

Die Idee selbst, Seiten aus wiederverwendbaren UI-Komponenten zusammenzusetzen, faszinierte David, der sie aus Delphi kannte, einem damals beliebten Werkzeug zum Erstellen von Desktop-Anwendungen. Ihm gefielen die Marktplätze mit Open-Source-Komponenten für Delphi. Er suchte deshalb eine Antwort auf die Frage: Wie lässt sich ein komponentenbasiertes Framework schaffen, das in völligem Einklang mit dem zustandslosen HTTP funktioniert? Er suchte ein Konzept, das zu Anwendern, zu SEO und zu Entwicklern gleichermaßen freundlich ist. Und so begann Nette Gestalt anzunehmen.

Der Name Nette entstand zufällig im Badezimmer, als der Autor eine Dose Rasiergel von Gillette bemerkte, die so gedreht war, dass nur llette zu sehen war.

Es folgten Tausende Stunden des Recherchierens, Nachdenkens und Umschreibens. In einer staubigen Garage in einem Dorf irgendwo bei Brno entstanden die ersten Umrisse des künftigen Frameworks. Zur architektonischen Grundlage wurde das Muster MVC (Model-View-Controller), das damals das inzwischen vergessene PHP-Framework Mojavi verwendete und das später der Wirbel um Ruby on Rails bekannt machte. Eine der Inspirationsquellen war sogar das nie veröffentlichte Framework phpBase von Honza Tichý.

Globales Hauptquartier von Nette, 2005

Auf dem Blog des Autors erschienen Artikel über das kommende Nette. Es kursierten Witze, es handle sich um Vaporware. Doch dann stellte David Nette im Oktober 2007 auf der Konferenz PHP Seminar in Prag öffentlich vor. Diese Konferenz entwickelte sich übrigens ein Jahr später zur WebExpo, die zu einer der größten IT-Konferenzen Europas wurde. Schon damals konnte Nette mit mehreren ursprünglichen Konzepten aufwarten, etwa dem erwähnten Komponentenmodell, einem bidirektionalen Router, einer besonderen Art der Verlinkung zwischen Presentern usw. Es hatte Formulare, löste Authentifizierung, Caching und weiteres. All diese grundlegenden Konzepte werden in Nette bis heute in ihrer ursprünglichen Form verwendet.

In Nette wird statt des Begriffs Controller der Begriff Presenter verwendet, angeblich weil es im Code zu viele Wörter gab, die mit con beginnen (controller, front controller, control, config, container, …).

Ende 2007 veröffentlichte David Grudl den Code, und Nette 0.7 erblickte das Licht der Welt. Das Framework erregte sofort enorme Aufmerksamkeit. Um es herum bildete sich eine begeisterte Community von Programmierern, die monatliche Treffen namens Posobota ins Leben rief. Zu dieser Community gehörten viele heute bedeutende Persönlichkeiten, etwa Ondřej Mirtes, der Autor des ausgezeichneten Werkzeugs PHPStan. Die Entwicklung von Nette raste voran, und in den folgenden zwei Jahren erschienen die Versionen 0.8 und 0.9, die die Grundlagen für fast alle heutigen Teile des Frameworks legten. Dazu gehörten auch die AJAX-Snippets, die Technologien wie Hotwire für Ruby on Rails oder Symfony UX Turbo um 14 Jahre vorwegnahmen.

Ein wesentliches Element fehlte dem frühen Nette allerdings: der Dependency Injection Container (DIC). Nette verwendete einen Service Locator, und der Plan war, zur Dependency Injection überzugehen. Aber wie entwirft man so etwas? David Grudl, der damals keine Erfahrung mit DI hatte, ging mit Václav Purchart zu Mittag, der DI seit etwa einem halben Jahr verwendete. Sie sprachen über das Thema, und David begann an Nette DI zu arbeiten, einer Bibliothek, die die Art des Anwendungsentwurfs vollständig umkrempelte. Der DI-Container wurde zu einem der gelungensten Teile des Frameworks und brachte später zwei Ableger hervor: das Format NEON und die Bibliothek Schema.

Der Übergang zur Dependency Injection nahm viel Zeit in Anspruch, und die Community wartete einige Jahre auf die neue Version von Nette. Als sie endlich erschien, bekam sie deshalb gleich die Nummer 2.0. Eine Version 1 von Nette gibt es also nicht.

Ihre moderne Ära begann Nette im Jahr 2012 mit der Version 2.0. Mit ihr kam auch Nette Database, das ein außerordentlich praktisches Werkzeug für die Arbeit mit Datenbanken enthielt, heute unter dem Namen Explorer bekannt. Diese Bibliothek programmierte ursprünglich Jakub Vrána, der Nachbar von David Grudl und Autor des beliebten Werkzeugs Adminer. Ihre Weiterentwicklung übernahm dann für drei Jahre Jan Škrášek.

Im Jahr 2014 erschien Nette 2.1 und kurz darauf Nette 2.2. Wie war das möglich? Die Version 2.2 war im Wesentlichen dieselbe wie 2.1, nur aufgeteilt in zwanzig eigenständige Pakete. In der Welt von PHP hatte sich das Werkzeug Composer durchgesetzt und die Art verändert, wie Bibliotheken gedacht werden. Nette hörte auf, ein Monolith zu sein, und wurde in kleinere, unabhängige Teile zerlegt, jeder mit eigenem Repository, eigenem Issue-Tracker sowie eigenem Entwicklungstempo und eigener Versionierung. Das vermeidet die Absurditäten monolithischer Frameworks, wo eine neue Version eines Pakets auch dann erscheint, wenn sich darin nichts geändert hat. Die eigentliche Aufteilung der Git-Repositories bedeutete mehrere Wochen Vorbereitung und Hunderte Stunden Maschinenzeit.

Nette erreichte außerdem einen beeindruckenden 3. Platz in der weltweiten Umfrage nach dem besten PHP-Framework, die das Magazin SitePoint veranstaltete.