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.
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.