Historia Nette

Początki Nette sięgają 2004 roku, kiedy to jego autor David Grudl zaczął szukać odpowiedniego frameworka, w którym można by pisać aplikacje, gdyż czyste PHP już nie wystarczało. Żadne z dostępnych wówczas rozwiązań nie odpowiadało mu, więc stopniowo zaczął zarysowywać cechy nowego frameworka, który później otrzymał nazwę Nette.

Wtedy jeszcze nie istniały obecne frameworki takie jak Symfony, Laravel czy Ruby on Rails. W świecie Javy standardem był JSF (JavaServer Faces), a w konkurencyjnym świecie .NET – ASP.NET Webforms. Oba umożliwiały budowanie stron z wykorzystaniem komponentów UI wielokrotnego użytku. David uznał ich metody abstrakcji i próby stworzenia bezpaństwowości nad bezpaństwowym protokołem HTTP za pomocą sesji lub postbacks za wadliwe i fundamentalnie zepsute. Sprawiały one wiele trudności użytkownikom i wyszukiwarkom. Na przykład, jeśli zapisałeś link, byłeś zaskoczony, że później znalazłeś pod nim inne treści.

Sama możliwość komponowania stron z komponentów UI wielokrotnego użytku fascynowała Davida, a znał ją dobrze z Delphi, popularnego wówczas narzędzia do tworzenia aplikacji desktopowych. Podobały mu się targowiska z komponentami opensource dla Delphi. Próbował więc rozwiązać problem, jak stworzyć ramy komponentów, które z kolei działałyby w pełnej harmonii z bezpaństwowym HTTP. Szukał koncepcji, która będzie przyjazna dla użytkowników, SEO i deweloperów. I tak narodziła się Nette.

Imię Nette powstało przypadkowo w łazience, kiedy autorka zauważyła pojemnik z żelem do golenia Gillette, obrócony tak, że widać było tylko llette.

Potem nastąpiły tysiące godzin badań, myślenia i przepisywania. W zakurzonym garażu w wiosce gdzieś pod Brnem powstały pierwsze zarysy przyszłej ramy. Podstawą architektury był wzorzec MVC, wykorzystywany wówczas przez zapomniany dziś framework PHP Mojavi, a później spopularyzowany przez szum wokół Ruby on Rails. Jednym ze źródeł inspiracji był nawet nigdy nie opublikowany framework phpBase autorstwa Honzy Tichego.

Artykuły o nadchodzącym Nette zaczęły pojawiać się na blogu autora. Żartowano, że chodzi o vaporware. Ale potem, w październiku 2007 roku, na konferencji Prague PHP Seminar, David publicznie przedstawił Nette. Nawiasem mówiąc, ta konferencja rok później wyewoluowała w WebExpo, później jedną z największych konferencji IT w Europie. Już wtedy Nette mogło pochwalić się wieloma oryginalnymi koncepcjami, takimi jak wspomniany model komponentowy, dwukierunkowy router, specyficzny sposób łączenia prezenterów itp. Miał formularze, uwierzytelnianie, buforowanie itp. Wszystko jest do dziś używane w Nette w swojej pierwotnej koncepcji.

W Nette zamiast kontrolera użyto terminu prezenter, ponieważ w kodzie było podobno za dużo słów zaczynających się od con (controller, front controller, control, config, container, …).

Pod koniec 2007 roku David Grudl opublikował kod i wydano Nette 0.7. Wokół niego uformowała się entuzjastyczna społeczność programistów, która zaczęła spotykać się co miesiąc na imprezie Posobota. W skład społeczności wchodziło wielu dzisiejszych luminarzy, takich jak Ondřej Mirtes, autor świetnego narzędzia PHPStan. Rozwój Nette posuwał się do przodu i w ciągu kolejnych dwóch lat wydano wersje 0.8 i 0.9, kładąc podwaliny pod niemal wszystkie dzisiejsze części frameworka. W tym AJAX snippets, które poprzedzają Hotwire dla Ruby on Rails lub Symfony UX Turbo o 14 lat.

Ale jednej zasadniczej rzeczy brakowało wtedy Nette. Dependecy injection container (DIC). Nette używało service locator, a intencją było przejście na dependecy injection. Ale jak zaprojektować coś takiego? David Grudl, który nie miał wtedy doświadczenia z DI, poszedł na lunch z Vaskiem Purchartem, który używał DI od około pół roku. Razem przedyskutowali temat i David rozpoczął pracę nad Nette DI, biblioteką, która całkowicie zrewolucjonizowała sposób myślenia o projektowaniu aplikacji. Kontener DI stał się jedną z najbardziej udanych części frameworka. I dał początek dwóm spin-offom: formatowi Neon i bibliotece Schema.

Przejście na wstrzykiwanie zależności zajęło dużo czasu, a nowa wersja Nette była w trakcie tworzenia kilka lat. Dlatego też, gdy w końcu się ukazał, został opatrzony numerem 2. Tak więc Nette w wersji 1 nie istnieje.

Nette rozpoczęło swoją nowoczesną historię w 2012 roku od wersji 2.0. Przyniósł również Nette Database, który zawierał niezwykle poręczne narzędzie bazodanowe, zwane teraz Explorerem. Biblioteka ta została pierwotnie zaprogramowana przez Jakuba Vrána, sąsiada Davida Grudela i autora popularnego narzędzia Adminer. Jego dalszy rozwój przejął następnie na trzy lata Jan Škrášek.

W 2014 roku ukazała się wersja Nette 2.1, a wkrótce po niej Nette 2.2. Wersja 2.2 była taka sama jak wersja 2.1, tylko podzielona na dwadzieścia oddzielnych pakietów. Narzędzie Composer zakorzeniło się w świecie PHP i zmieniło sposób myślenia o tworzeniu bibliotek. Nette przestało być monolitem i rozpadło się na mniejsze niezależne części. Każdy z nich ma swoje własne repozytorium, issue tracker i własne tempo rozwoju i wersjonowania. Dzięki temu Nette nie musi przechodzić przez absurdy powszechne w monolitycznych frameworkach, gdzie wychodzi nowa wersja pakietu, mimo że nic się nie zmieniło. Faktyczne rozdzielenie repozytoriów Git wymagało kilku tygodni przygotowań i setek godzin czasu maszynowego.

Nette zajęło również niesamowite 3 miejsce w globalnym plebiscycie na najlepszy framework PHP organizowanym przez magazyn Sitepoint.