Historia Nette

Początki Nette sięgają roku 2004, gdy jego autor, David Grudl, zaczął szukać odpowiedniego frameworku do pisania aplikacji, bo czyste PHP już nie wystarczało. Żadne z dostępnych wtedy rozwiązań nie spełniało jego potrzeb, więc stopniowo zaczął szkicować cechy nowego frameworku, który później otrzymał nazwę Nette.

W tamtym czasie nowoczesne frameworki jak Symfony, Laravel czy Ruby on Rails jeszcze nie istniały. W świecie Javy standardem był JSF (JavaServer Faces), a w konkurencyjnym świecie .NET dominował ASP.NET WebForms. Oba pozwalały budować strony z komponentów UI nadających się do ponownego użycia. David uważał jednak ich sposoby abstrakcji i próby symulowania stanowości nad bezstanowym protokołem HTTP za pomocą sesji czy tak zwanych postbacków za wadliwe i z gruntu zepsute. Powodowały mnóstwo trudności użytkownikom i wyszukiwarkom. Jeśli na przykład zapisałeś odnośnik, mogłeś się później zdziwić, że pod nim jest inna treść.

Sama idea składania stron z komponentów UI nadających się do ponownego użycia fascynowała Davida, który znał ją z Delphi, popularnego wtedy narzędzia do budowania aplikacji desktopowych. Podobały mu się rynki oferujące open source'owe komponenty dla Delphi. Szukał więc odpowiedzi na pytanie: jak stworzyć framework komponentowy, który działałby w pełnej harmonii z bezstanowym HTTP? Szukał koncepcji przyjaznej zarazem użytkownikom, SEO i programistom. I tak Nette zaczęło nabierać kształtu.

Nazwa Nette powstała przypadkiem w łazience, gdy autor zauważył puszkę żelu do golenia Gillette, obróconą tak, że widoczne było tylko llette.

Nastąpiły tysiące godzin badań, rozmyślań i przepisywania. W zakurzonym garażu we wsi gdzieś pod Brnem powstały pierwsze zarysy przyszłego frameworku. Podstawą architektoniczną stał się wzorzec MVC (Model-View-Controller), używany wtedy przez dziś zapomniany framework PHP Mojavi, a później spopularyzowany przez szum wokół Ruby on Rails. Jednym ze źródeł inspiracji był nawet nigdy niewydany framework phpBase Honzy Tichego.

Globalna kwatera główna Nette, 2005

Na blogu autora zaczęły pojawiać się artykuły o nadchodzącym Nette. Krążyły żarty, że to vaporware. Ale potem, w październiku 2007 na konferencji PHP Seminar w Pradze, David publicznie przedstawił Nette. Nawiasem mówiąc, konferencja ta rok później przekształciła się w WebExpo, które stało się jedną z największych konferencji IT w Europie. Już wtedy Nette mogło się pochwalić kilkoma oryginalnymi koncepcjami, jak wspomniany model komponentowy, dwukierunkowy router, specyficzny sposób linkowania między presenterami itd. Miało formularze, rozwiązywało uwierzytelnianie, cache i więcej. Wszystkie te kluczowe koncepcje są w Nette używane do dziś w pierwotnej postaci.

W Nette zamiast pojęcia controller używa się presenter, podobno dlatego, że w kodzie było zbyt wiele słów zaczynających się na con (controller, front controller, control, config, container, …).

Pod koniec 2007 David Grudl wydał kod i Nette 0.7 ujrzało światło dzienne. Framework od razu przyciągnął ogromną uwagę. Wokół niego uformowała się entuzjastyczna społeczność programistów, która zaczęła organizować comiesięczne spotkania zwane Posobota. W społeczności tej było wiele postaci dziś wybitnych, jak Ondřej Mirtes, autor doskonałego narzędzia PHPStan. Rozwój Nette pędził naprzód i w kolejnych dwóch latach wyszły wersje 0.8 i 0.9, kładąc podwaliny pod niemal wszystkie obecne części frameworku. Należały do nich snippety AJAX-owe, które wyprzedziły technologie takie jak Hotwire dla Ruby on Rails czy Symfony UX Turbo o 14 lat.

We wczesnym Nette brakowało jednak jednego kluczowego elementu: kontenera Dependency Injection (DIC). Nette używało service locatora, a planem było przejście na dependency injection. Ale jak coś takiego zaprojektować? David Grudl, nieposiadający wtedy doświadczenia z DI, poszedł na obiad z Václavem Purchartem, który używał DI od jakichś sześciu miesięcy. Przedyskutowali temat, a David zaczął pracować nad Nette DI, biblioteką, która całkowicie zrewolucjonizowała podejście do projektowania aplikacji. Kontener DI stał się jedną z najbardziej udanych części frameworku i dał później początek dwóm spin-offom: formatowi NEON i bibliotece Schema.

Przejście na dependency injection zajęło sporo czasu, a społeczność czekała na nową wersję Nette kilka lat. Dlatego gdy w końcu wyszła, otrzymała numer od razu 2.0. Nette w wersji 1 zatem nie istnieje.

Nette weszło w swoją nowoczesną erę w 2012 wraz z wersją 2.0. Wprowadziła ona też Nette Database, zawierające wyjątkowo poręczne narzędzie do pracy z bazami danych, znane dziś jako Explorer. Bibliotekę tę pierwotnie zaprogramował Jakub Vrána, sąsiad Davida Grudla i autor popularnego narzędzia Adminer. Jej dalszy rozwój przejął potem na trzy lata Jan Škrášek.

W 2014 wyszło Nette 2.1, a wkrótce po nim Nette 2.2. Jak to możliwe? Wersja 2.2 była w zasadzie taka sama jak 2.1, ale rozbita na dwadzieścia osobnych pakietów. W świecie PHP ugruntowało się narzędzie Composer, zmieniając sposób myślenia o bibliotekach. Nette przestało być monolitem i zostało rozbite na mniejsze, niezależne części, każda z własnym repozytorium, issue trackerem oraz własnym tempem rozwoju i wersjonowaniem. Pozwala to uniknąć absurdów typowych dla frameworków monolitycznych, gdzie nowa wersja pakietu wychodzi, nawet jeśli nic się w nim nie zmieniło. Samo rozdzielenie repozytoriów Gita wymagało kilku tygodni przygotowań i setek godzin czasu maszynowego.

Nette osiągnęło też imponujące 3. miejsce w globalnej ankiecie na najlepszy framework PHP organizowanej przez magazyn SitePoint.