Author: mmazur                       Date: Mon Mar  7 16:41:41 2005 GMT
Module: PLD-doc                       Tag: HEAD
---- Log message:
- oryginalna wersja; trza wyciąć błędy odnośnie ac i doprecyzować kilka
  rzeczy

---- Files affected:
PLD-doc:
   PLD_3.0_plany.txt (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: PLD-doc/PLD_3.0_plany.txt
diff -u /dev/null PLD-doc/PLD_3.0_plany.txt:1.1
--- /dev/null   Mon Mar  7 17:41:41 2005
+++ PLD-doc/PLD_3.0_plany.txt   Mon Mar  7 17:41:36 2005
@@ -0,0 +1,239 @@
+"Zgodnie ze zdrowym rozsądkiem należy wziąć jakąś metodę i wypróbować ją. Gdy
+okaże się zawodna, trzeba to szczerze przyznać i wypróbować inną. Ale nade
+wszystko trzeba próbować." -- Franklin Delano Roosevelt
+
+JAK TO JEST (I BYŁO) W AC
+
+Gdy tylko buildery Ac zostały ukończone, pełny dostęp do nich został przyznany
+każdemu, kto wykazał zainteresowanie. Nie zostały przy tym na chętnych nałożone
+żadne ograniczenia, gdyż, przynajmniej przez pierwsze kilka miesięcy rozwoju,
+nacisk został położony na jak najszybsze zbudowanie wszystkich potrzebnych
+pakietów.  Ale gdy te pakiety zostały już zbudowane i, zamiast dodawać nowe,
+zaczęto aktualizować już istniejące, wtedy zaczęły się problemy. Deweloperzy
+nie mieli dostępu do odpowiedniej części infrastruktury (ani nie dysponowali
+żadnymi rozwiązaniami technicznymi zastępującymi ten dostęp), przez co, nawet
+gdyby chcieli, nie byli w stanie zapewniać bezproblemowej integracji swoich
+zmian z resztą dystrybucji.  Tego typu zadania mógł wykonywać tylko Release
+Manager. Z biegiem czasu proces tworzenia Ac był modyfikowany tak, by umożliwić
+Release Managerowi zapanowanie nad zmianami i dopilnowanie, by wszędzie panował
+ład. Na chwilę obecną problemów z rozłażącymi się zależnościami i dziwnymi
+zmianami raczej nie ma. Zostało to osiągnięte dzięki wprowadzeniu wyraźnego
+podziału na deweloperów zajmujących się stabilizacją (i powolnym rozwojem)
+dystrybucji oraz tych, którzy głównie skupiają się na testowaniu nowego,
+potrzebnego im oprogramowania. W praktyce pewna ilość osób ma uprawnienia do
+budowania pakietów do drzewka 'test', podczas gdy tylko cztery osoby mogą
+budować do drzewka 'ready'.
+
+Zastanawiające jest, jakim kosztem została osiągnięta ta stabilizacja. Drzewko
+testowe ma to ograniczenie, że żaden pakiet nie może zostać z niego
+przeniesiony bezpośrednio do drzewka głównego. W tym celu trzeba najpierw
+poprosić jedną z czterech uprawnionych osób o puszczenie zlecenia do 'ready', a
+następnie czekać, aż Release Manager pakiet przeniesie. Czy te cztery osoby
+rzeczywiście sprawdzają programy, których przebudowanie zlecają, czy też
+reagują na prośby niejako automatycznie? A ilu deweloperom wystarczy, że ich
+program trafi na jakiś czas do drzewka testowego i nigdy nie chce im się
+dopilnowywać, by trafił do 'main'? Niestety nie dysponuję danymi statystycznymi
+z całego okresu rozwoju Ac, ale jeśli przyjąć tezę, że stabilizacja została
+osiągnięta właśnie dzięki niejako sztucznemu ograniczeniu ilości paczek, jakie
+trafiają do głównego drzewka, to czy takie rozwiązanie jest pożądane z punktu
+widzenia dystrybucji? 
+
+A nawet jeśli powodem polepszenia jakości Ac nie jest ograniczenie ilości
+zmian, ale lepszy nadzór nad tymi zmianami, to należy postawić pytanie, jak
+bardzo skaluje się obecne rozwiązanie. Skoro deweloperzy nie mogą bezpośrednio
+zajmować się interesującymi ich pakietami, to polega się na tym, że zespół
+nadzorujący będzie wszystkiego pilnował (albo będzie się komunikował z resztą
+deweloperów). Ale jak wiele osób jest chętnych/ma czas na pilnowanie nieswoich
+zabawek i gdzie leży granica liczebności, powyżej której taki zespół nie będzie
+się w stanie skoordynować? O trwającym obecnie przestoju z przenoszeniem paczek
+z 'ready' wiedzą chyba wszyscy, ale z czego wynika to, że żadna z pozostałych
+trzech osób się tym nie zajmuje? Boją się, że mogą o czymś nie wiedzieć, a nie
+chcą popsuć?
+
+JAK BĘDZIE W TH
+
+Do tej pory oficjalnie wydaliśmy tylko Ra i to było dawno temu, zaś Ac jest,
+przynajmniej teoretycznie, na ukończeniu. Modelom rozwoju tak Ra, jak i Ac
+daleko od doskonałości -- właściwie wszystko zależało i zależy od istnienia
+osób, które mają na zbyciu duże ilości czasu i które są gotowe go poświęcić na
+robienie czegoś znacznie ponad SOD#1.  Na stały dopływ kloczków nie ma co
+liczyć, trzeba wymyślić taki sposób tworzenia dystrybucji, żeby nie byli
+potrzebni. Z natury rzeczy Release Manager musi się zajmować wieloma różnymi
+rzeczami, ale trzeba ich ilość ograniczyć do niezbędnego minimum, jeśli chcemy
+zapewnić sprawny rozwój PLD w dłuższym okresie czasu.
+
+O usprawnieniach technicznych, jakie wprowadziłem do nowej automatyki
+builderowej i ftpowej, nie będę pisał -- takie sprawy będzie omawiała
+dokumentacja (jak ją wreszcie napiszę). Tutaj się raczej skupię na zmianach
+organizacyjnych i powodach, dla których warto je wprowadzić.
+
+Najważniejszą zmianą będzie przywrócenie znanego z Ra trybu umieszczania paczek
+w 'main'. Będzie to polegało na tym, że wszystkie paczki po zbudowaniu będą
+trafiały do 'test' w celu... no cóż -- przetestowania. Te paczki, które będą
+się nadawały do przeniesienia do 'main', będą przenoszone. I tutaj kilka
+wyjaśnień.
+
+Po pierwsze, nie ma żadnego problemu z przechowywaniem w 'test' najnowszego
+snapshota jakiegoś oprogramowania, z równoczesnym trzymaniem wersji stabilnej,
+która to wersja stabilna zostanie przeniesiona do 'main' bez ruszania
+snapshota. Nowa automatyka radzi sobie z taką sytuacją bez mrugnięcia okiem.
+Oczywiście oznacza to, że upgrejdowanie na ślepo z drzewka testowego nie będzie
+najszczęśliwszym pomysłem, ale aktualizacja do konkretnej wersji nie jest
+żadnym problemem przy użyciu poldka.
+
+Po drugie, nie oznacza to zlikwidowania testowych zleceń, ale różnica jest
+taka, że testowe zlecenia będą służyły tylko i wyłącznie do sprawdzania, czy
+dany pakiet się poprawnie buduje. Ja testowych zleceń używam tylko do
+inkrementalnego sprawdzania, czy moja poprawka działa na danej architekturze
+(commit, zlecenie, commit, zlecenie...) i zapewne nie będą one służyły do
+niczego innego. Katalog z paczkami zbudowanymi w wyniku takich zleceń jest po
+pierwsze ukryty (katalog '.test-builds'), a po drugie nie są w nim generowane
+indeksy poldkowe. Same zaś paczki są automatycznie usuwane po kilkudziesięciu
+godzinach.
+
+Na pierwszy rzut oka wygląda to tak, jakbym tylko pozmieniał nazwy katalogów w
+porównaniu do Ac ('ready' teraz nazywa się 'test', a 'test' -- '.test-builds')
+i wyłączył generowanie indeksów dla tego ostatniego (żeby ludziom utrudniać
+życie). Żeby zrozumieć na czym rzeczywiście polega ta zmiana, trzeba sobie
+najpierw uzmysłowić skąd się wziął obecny podział. Otóż, tworząc nową
+automatykę builderową, malekith założył, że paczki gotowe do przeniesienia będą
+trafiały do 'ready', a paczki testowe ('na śmietnik') do 'test'. Tyle, że
+drzewko 'ready' nie zostało stworzone w tym celu -- miało ono za zadanie być
+tylko etapem pośredni przy przenoszeniu wybranych paczek z 'test' do 'main' --
+etapem, na którym jest możliwość sprawdzania poldkiem, czy wszystkie zależności
+są jak trzeba.  Ponieważ na początku prac nad Ac nie potrafiłem zmieniać kodu
+automatyki builderowej, a i nie miałem takiej potrzeby (wszystkie zbudowane
+paczki były i tak od razu przenoszone do 'main'), więc od samego początku
+wszyscy zaczęli pracować w ten sposób. I tak już zostało. Ten stan został nawet
+spetryfikowany znacznym zmniejszeniem uprawnień większości puszczających.
+
+Ale tak nie miało być. Koncepcja pracy tylko i wyłącznie nad jednym drzewkiem
+(tak, jak to było w Ra) jest o wiele sensowniejsza. Najważniejszą kwestią jest
+nie zakładanie a priori, że jedno drzewko będzie śmietnikiem (jakim jest 'test'
+w Ac), a drugie będzie dla wybranych. Przy podejściu z jednym drzewkiem jest
+wiadome, że każdy pakiet do niego trafiający jest potencjalnym kandydatem do
+przeniesienia do 'main'. Release Manager może np. generować sobie listę
+pakietów starszych, niż miesiąc i wtedy pytać się deweloperów, którzy puścili
+zlecenie, czy paczkę przenieść, czy skasować. Bo i takie powinno być jego
+zadanie -- pilnować, czy deweloperzy o czymś nie zapomnieli, komunikować się z
+nimi, rozsądzać kwestie sporne. I pilnować, żeby praca nie szła na marne --
+przy jednym drzewku można mieć jasną sytuację z każdym jednym pakietem. Nie
+będzie takich, które zostaną skasowane przez automat i nikt tego nie zauważy.
+
+Głównym problemem przy takim podejściu jest rozwiązanie kwestii komunikacji
+pomiędzy deweloperami i Release Managerem. To ten ostatni fizycznie uruchamia
+program przenoszący paczki, więc musi dysponować dokładnymi informacjami na ten
+temat. Rozwiązanie jest bardzo proste (i właśnie je implementuję) -- należy dać
+deweloperom interfejs, używając którego będą mogli zaznaczać pakiety, które
+chcą, żeby zostały przeniesione. Ze względu na nową funkcjonalność poldka, jest
+bardzo prawdopodobne, że ów interfejs będzie automatycznie zaznaczał do
+przeniesienia pakiety zależne i odmawiał zaznaczenia, jeśli pakiety zależne nie
+będą obecne w 'test' (fizycznie nie będzie możliwości przypadkowego popsucia
+zależności).
+
+Tutaj rodzi się pierwsze pytanie odnośnie szczegółów implementacji -- czy
+deweloperzy powinni mieć możliwość zaznaczania tylko tych pakietów, których
+zbudowanie sami zlecili? Teoretycznie zawsze trzymaliśmy się zasady, żeby nie
+wprowadzać sztucznych ograniczeń i dać każdemu deweloperowi możliwość
+ingerencji w dowolną część dystrybucji, ale zarządzanie stabilną linią to nie
+commitowanie do cvsu -- tutaj przeniesienie pakietu, który ma jakieś błędy (o
+których, przynajmniej w teorii, najlepiej powinien być poinformowany autor
+zlecenia) jest czymś, czego powinniśmy się starać za wszelką cenę unikać. Więc
+sensownym wydaje się ograniczenie ilości osób mających prawa do przenoszenia
+dowolnych paczek tylko do jakiejś małej grupy ludzi. Wstępnie jednak zezwolę na
+wolną amerykankę -- dopiero jeśli okaże się, że deweloperzy nie potrafią się
+sami dogadywać między sobą, to pomyśli się o wprowadzaniu sztywnych ograniczeń.
+
+Jest też problem aktualizacji pakietów na builderach. Z doświadczenia wiem, że
+puszczanie zleceń z domyślnie ustawioną flagą 'upgrade' nie jest
+najszczęśliwszym pomysłem i szybko prowadzi do bałaganu. Na pewno sensowne jest
+ustawienie automatycznej aktualizacji pakietów do tych, które zostają
+przenoszone do 'main'. Pytanie, co zrobić z pakietami, które do zbudowania
+wymagają nowszej wersji jakiejś biblioteki i nie można ich przenieść do 'main'
+(tym samym aktualizując na builderach), gdyż psułoby to zależności w 'main'.
+Teoretycznie kilka osób zawsze będzie miało możliwość ręcznej aktualizacji
+pakietów na builderach (przy pomocy odpowiedniego zlecenia), ale wtedy na te
+osoby spada odpowiedzialność za pilnowanie, czy wszystko jest w porządku. Nie
+dysponuję danymi, jak często taka funkcjonalność jest potrzebna, więc możliwe,
+że coś takiego może w praktyce działać. Jednak zaimplementowanie w w/w
+interfejsie do obsługi ftpa odpowiedniej funkcjonalności, dzięki której
+deweloperzy będą mogli słać zlecenia upgrejdu określonych paczek (a interfejs,
+jak zwykle, będzie mógł wykonać kilka automatycznych testów, dzięki którym
+będzie można łatwo zapobiegać desynchronizacji builderów), nie powinno być
+specjalnie trudne. A będzie miało to tę zaletę, że wszystkie zlecenia
+aktualizacji będą łatwo obserwowalne dzięki odpowiedniej liście mailingowej.
+
+To, co opisałem powyżej, to tylko plan minimum. Na bazie nowej infrastruktury
+można wprowadzać bardzo dużo różnych rozwiązań. Z pomysłów, które można wdrożyć
+praktycznie od razu, chyba najprzydatniejszym będzie lista mailingowa na którą
+będą wysyłane informacje o każdym zaznaczonym do przeniesienia pakiecie. Tutaj
+warto też zastanowić się nad wprowadzeniem odpowiedników commit logów, dzięki
+którym tak osoby śledzące ową listę, jak i Release Manager, miałyby wgląd do
+ewentualnych komentarzy dotyczących danej paczki (poprawka błędu security?).
+Takie rozwiązania zapewniłyby wszystkim zainteresowanym deweloperom możliwość
+śledzenia w czasie rzeczywistym zmian zachodzących w dystrybucji, czyli czegoś,
+bez czego nie wyobrażamy sobie korzystania z naszych repozytoriów, ale co jest
+w bardzo ograniczonym zakresie dostępne przy tworzeniu Ac.
+
+Oczywiście można się też zastanowić nad otoczeniem krytycznych pakietów
+szczególną 'opieką' poprzez umożliwienie tylko określonym osobom (qboosh ;)
+szybkiego przenoszenie paczek typu glibc, kernel, czy też najważniejsze demony.
+Domyślnie takie pakiety musiałyby przeleżeć w 'test' co najmniej tydzień (albo
+dwa). Zresztą teoretycznie można by wszystkie paczki objąć taką obowiązkową
+kwarantanną i przenosić bez leżakowania tylko w drodze wyjątku (błędy
+security). Kwestia do rozważenia.
+
+Jednak najbardziej ambitnym pomysłem jest integracja zarządzania zawartością
+serwera ftp z systemem śledzenia błędów. Podstawowa funkcjonalność polegałaby
+na tym, że otworzenie błędu dla danego pakietu blokowałoby możliwość
+przeniesienia tego pakietu do 'main'. Żeby paczkę przenieść, należałoby
+najpierw błąd zamknąć. Błąd byłby też zamykany w przypadku usunięcia pakietu z
+ftpa. Miałoby wtedy sens otwieranie błędów security, gdyż byłyby one
+automatycznie zamykane przy pojawieniu się nowszego pakietu (przy czym
+niekoniecznie zgodnie z prawdą -- pojawienie się nowego pakietu jeszcze nie
+znaczy, że ktoś w nim poprawił błąd, ale jest go dosyć bezpieczne założenie).
+Ciekawych pomysłów na zapewnienie jakiegoś sensownego kanału, dzięki któremu
+zainteresowani mogliby być informowani o błędach klasy security, można by
+pewnie zaproponować jeszcze kilka.
+
+Powyższy scenariusz miałby też tę zaletę, że system śledzenia błędów wreszcie
+zacząłby być używany do czegoś (a są takie systemy przeważnie całkiem wygodne w
+użyciu, gdyż, jeśli chodzi o samo informowanie, to wszystko może się odbywać
+przy pomocy maili). I, co ważniejsze, po raz pierwszy w historii PLD,
+użytkownicy nie służyliby tylko do zjadania łącza na serwerach ftp, ale
+rzeczywiście mogliby się do czegoś przydać (już nie wspominając o tym, że
+prawie martwy butracker nie wygląda zbyt zachęcająco).
+
+Oczywiście możliwe jest zaimplementowanie niezliczonej ilości drobnych
+usprawnień przy używaniu bugtrackera. Maillista z informacjami o błędach to
+podstawa, ale równie dobrze zgłoszenie o błędzie w danym pakiecie mogłoby
+automatycznie powodować wysłanie informacji do osób, które puszczały dane
+zlecenie (tak, nowa automatyka przechowuje takie informacje). Tak samo
+zastosowanie kwarantanny, o której wspominałem kilka akapitów wyżej, mogłoby
+być zaimplementowane przy pomocy automatycznie otwieranego błędu, który by się
+też automatycznie zamykał po określonym czasie (chyba, że ktoś by go wcześniej
+zamknął).
+
+PODSUMOWANIE
+
+Zwiększenie udziału deweloperów w tworzeniu danej linii dystrybucji, czy to
+przez danie im większej kontroli, czy też dostępu do większej ilości
+informacji, jest jak najbardziej pożądane. Powyżej opisałem różne pomysły i
+podałem możliwe wariacja dla każdego. Daje to gwarancję, że w razie problemów,
+będzie można zawsze spróbować trochę innego podejścia, a nie czekać, aż
+wszystko się rozlezie.
+
+I na koniec, żeby było jasne -- jeśli się okaże, że opisane powyżej rozwiązania
+w żadnej kombinacji się nie sprawdzają, to, przynajmniej z technicznego punktu
+widzenia, przywrócenie stanu, jaki jest obecnie w Ac, nie będzie żadnym
+problemem (a i tak używanie tej automatyki będzie znacznie wygodniejsze w
+porównaniu do tego, czego się używa obecnie). Przy czym bycie Release Managerem
+przy ilości pracy, jaka jest wymagana przy obecnym sposobie tworzenia
+dystrybucji, to jest jednak coś, z czego ja najprawdopodobniej zrezygnuję. A i
+pytanie, czy znajdzie się ktoś inny, bo havner się nie sklonuje, niektórych
+ludzi wręcz szkoda przeznaczać do zajęć nietechnicznych (a i pewnie nie mieliby
+na to czasu), a świeża krew w PLD i owszem, jest, ale... no cóż -- jest jednak
+trochę zbyt świeża.
+
+
+# vi: formatoptions=a
================================================================

_______________________________________________
pld-cvs-commit mailing list
pld-cvs-commit@pld-linux.org
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to