|
Kernel Traffic Latest | Archives | People | Topics |
Wine Latest | Archives | People | Topics |
GNUe Latest | Archives | People | Topics |
| Czech |
| Home | News | RSS Feeds | Mailing Lists | Authors Info | Mirrors | Stalled Traffic |
Table Of Contents
| 1. | 28 Nov 2001 - 10 Dec 2001 | (383 posts) | Styl kodowania; filozofia rozwijania |
| 2. | 30 Nov 2001 - 9 Dec 2001 | (21 posts) | Dokumentacja sieciowa |
| 3. | 2 Dec 2001 - 12 Dec 2001 | (134 posts) | Nowe narzędzia do budowania jądra |
| 4. | 2 Dec 2001 - 8 Dec 2001 | (25 posts) | Rozwój 2.4 |
| 5. | 6 Dec 2001 - 11 Dec 2001 | (52 posts) | Grafik wydawania 2.4 |
| 6. | 6 Dec 2001 - 10 Dec 2001 | (23 posts) | Szamotanina deweloperów w 2.4 |
| 7. | 10 Dec 2001 | (9 posts) | Rozbieżność pomiędzy 2.4 i 2.5 |
| 8. | 10 Dec 2001 | (5 posts) | Filozofia rozwoju 2.4 |
Mailing List Stats For This Week
We looked at 1953 posts in 7867K.
There were 504 different contributors. 248 posted more than once. 197 posted last week too.
The top posters of the week were:
1. Styl kodowania; filozofia rozwijania
28 Nov 2001 - 10 Dec 2001 (383 posts) Archive Link: "Styl kodowania - nie ma problemu"
People: Alexander Viro, Larry McVoy, Henning P. Schmiedehausen, Jeff Garzik, Alan Cox, David S. Miller, Rik van Riel, Daniel Phillips, Linus Torvalds, Tim Hockin, Victor Yodaiken, Horst von Brand, Ingo Molnar
Peter Waltenberg zaproponował użycie programu 'indent' do uporządkowania stylu kodowania, na który tak często się ostatnio skarżą różni ludzie. Parę osób odesłało go do skryptu 'Lindent', który jest dystrybuowany wraz ze źródłami jądra, a Alexander Viro napisał też:
indent _nie_ rozwiązuje następujących problemów:
Dodał, że był "bliski ustanowienia Linux Kernel Hall of Shame - zawierającego nazwiska i nazwy parszywców (ludzi i firm) piszących takie rzeczy, ich kod i komentarz na temat tego kodu... " Larry McVoy (z wywieszonym językiem) odpowiedział, " Proszę, proszę, proszę, błagam Cię, proszę zrób to. To jedyny sposób żeby ludzie szybciej zaczęli się uczyć. Bycie miłym jest wspaniałe, ale nic nie działa szybciej niż zimny prysznic publicznego poniżenia." Henning P. Schmiedehausen odpowiedział:
Super. Już to widzę. ,,foo inc.'' wypuszcza sterownik dla Linuksa na GPL i zostaje publicznie upokorzona na ,,linux source code hall of shame''. Idealnie. Nawet tu dochodzi do mnie śmiech z Redmond (a to 12000km stąd).
Informacja prasowa:
,,Jeśli wspierasz Linuksa, możesz zostać za to publicznie upokorzony. Nie rób tego.''
Dorośnijcie. Jest sporo rzeczy ważniejszych niż styl kodowania, który nie jest ,,kompatybilny z Alem Viro (TM)''.
Ech, czasem, czasem _naprawdę_ rozumiem gości od BSD, gdy nazywają społeczność Linuksową ,,bandą potarganych wariatów, którzy potrzebują mieć życie''. Gdyby tylko oni używali sensownych skryptów startowych. ;-)
Larry napisał, "Być może ta wiedza kogoś oświeci, zajmowałem się BSD i nauczyłem się wartości tej szczególnej techniki w grupie pracującej nad jądrem w Sunie, która dawno, dawno temu była najlepszą grupą BSD na Ziemi. Być może oświecę Was też stwierdzeniem, że ta technika pozyskiwania ludzi, by słuchali jest wciąż używana w Sunie. Profesjonalizm w stylu Suna raczej nie jest tym co chcielibyście tu widzieć." Na to odpowiedział Henning, " Być może rozjaśnię trochę sytuację pisząc, że zamknięta grupa koderów SUNa nie jest porównywalna z rozproszonym po całym świecie środowiskiem tysięcy ludzi i firm. " Dodał:
Starasz się powiedzieć, że SUN traktował w ten sposób _KLIENTóW_ i firmy, które chciały obsługiwać SunOS 4.2.x? Jeśli tak, to już wiem do czego był im potrzebny SysV. Oczywiście, nikt by dłużej nie chciał BSD.
Jeśli wewnętrzna grupa deweloperów w SUNie tak się nawzajem traktowała, to także ,,potrzebowali zmiany''. :-)
Jeff Garzik natomiast zgodził się z Larrym, " Społeczność zajmująca się bezpieczeństwem nie raz pokazała nam, że publiczne zawstydzanie jest czasem jedynym sposobem motywowania producentów oprogramowania do naprawienia problemow z bezpieczeństwem. Tak, nawet ludzie od bezpieczeństwa BSD to robią :)" Napisał, że z chęcią zobaczyłby listę ,,10 najpaskudniejszych sterowników w jądrze Linuksa''. Ale Henning miał wątpliwości:
Kwestia bezpieczeństwa jest powszechnie akceptowanym problemem, który w większości przypadków ma powód i rozwiązanie.
Styl kodowania jest jednak bardzo osobistą rzeczą, która zaczyna się od pytania ,,czy powinniśmy używać tabulacji, czy nie?'' (Jakarta: Nie. Linux: Tak ...) i przez pytanie ,,Czy makro preprocesora jest dobre, czy nie'' dochodzi do nazw zmiennych (Al Viro: Nazwy, które mają więcej niż pięć liter, obsysają. :-) Java: Nazwy, które nie są samodefiniujące się, obsysają. Microsoft: nazwy bez notacji węgierskiej, obsysają) i tak dalej.
Naprawdę chcesz oceniać kod tylko po tym, że ktoś lubi owijać kod w makra preprocesora albo używa WIELKICH LITER w nazwach zmiennych?
Daj spokój. To jest _fundamentalnie_ inny problem niż problem producentów topiących się we własnych odchodach, gdy namieszają i ich sprzęt/program ma błąd bezpieczeństwa. Kod, który uważasz za piekielnie obrzydliwy, może być opisany przez autora jako ,,łatwy do zrozumienia i rozwijania''. Jeśli on działa i nie ma błędów, to co? Tylko dlatego, że trudno nam go zrozumieć (porównaj to z ,,niezwykłymi procedurami w NTFS-ie'' (Jakoś tak to określił Jeff Merkey). Zdaje się, że cały czas dobrze działają.
Czy chcesz osądzać ,,brzydotę'' sterowników w jądrze? Które są okropne? Czy sterowniki Donalda Beckera są paskudne tylko dlatego, że (przynajmniej w 2.2) używa on własnych pomocniczych bibliotek pci? Czy sterowniki aic7xxx są brzydkie bo wymagają libdb? A może brzydota jest definiowana przez stwierdzenie, że ,,Nie podoba się Larremu i Alowi''? :-)
Objeżdżanie za styl kodowania jest tak samo bezsensowne, jak wkurzanie się na kogoś za to, że kibicuje innej drużynie sportowej. Nie ma jednego, powszechnie akceptowanego, stylu kodowania. Nawet w C.
Alan Cox odpowiedział:
Jądro ma powszechnie akceptowany styl kodowania, zarówno ten udokumentowany, jak i ten mieszczący się w tradycji. Używanie go bardzo bardzo ułatwia opiekę nad kodem. Wymuszanie go tam jest dobrym pomysłem, z wyjątkiem sytuacji specjalnych (nagłówki współdzielone z NT są jednym z przykładów).
Są także pewne całkiem miłe narzędzia, które wykonają pierwszą fazę przenoszenia ,,węgierskich'', ,,zNTowanych'' sterowników i zlinuksowanie ich.
Jeff, w podobnym tonie, dodał, że "Różne style kodowania w jądrze Linuksa są przyczyną długoterminowych problemów związanych z utrzymywaniem kodu." W podobny sposób wypowiedział się też Alexander:
Fakty z życia: wszyscy dajemy ciała przy przeglądaniu naszego kodu. Ty, ja, Ken Thompson, ktoś inny - zwykle nie zauważamy błędów w kodzie, który sami napisaliśmy. W zależności od umiejętności możemy to naprawić - istnieją techniki, które pomagają w takich wypadkach, ale to nie zmienia faktu, że przeglądanie kodu przez ludzi, którzy go nie pisali zwykle pokazuje błędy, których nie zauważaliśmy przez lata.
Jeśli naprawdę nie wiesz tego z doświadczenia - nie _masz_ doświadczenia. Jest jeden cholernie dobry powód ujednolicania stylu w projekcie: przeglądanie go pomaga. Zgubiłem już rachubę błędów w sterownikach, które znalazłem po prostu grepując drzewo. Nawet na tym poziomie udaje się znaleźć tony błędów. I nie mam powodów wątpić w to, że autorzy tych właśnie sterowników naprawiliby je tak szybko, jak tylko by zobaczyli wymieniane błędy.
,,To mój kod i nie obchodzi mnie czy ktoś jeszcze może go przeczytać'' - tak by się każdy od razu bronił. Być może, z akademickiego punktu widzenia, to jest w porządku, ale w prawdziwym życiu jest po prostu nieakceptowalne.
Bardzo miło i elegancko jest ronić łzy nad biednymi, wymęczonymi firmami, które chciały dobrze i uszczęśliwiły wszystkich poprawnym, ale zupełnie nieczytelnym kodem, a teraz są upokarzane przez złośliwych niewdzięczników. Ładny obrazek, ale rzeczywistość jest inna. Kod jest _pełen_błędów_. To jest dana, niezależna od pochodzenia kodu. Jedyne pytanie to takie, jak szybko da się te błędy poprawić. A to bezpośrednio zależy od tego, ile wysiłku potrzeba by ten kod przeczytać.
Dyskusja toczyła się dalej, a dramatyczny zwrot nastąpił, gdy Larry wetknął szpilę, "Jeśli myślicie, że Linux jest na tym samym poziomie co systemy Suna, albo że kiedyś na nim będzie, to oszukujecie samych siebie. Linux jest naprawdę fajny, uwielbiam go i codziennie używam. Ale nie jest porównywalny z Solarisem, wybaczcie, nie jest nawet blisko. Nie jestem raczej znany z mojej miłości do Solarisa, wiecie, że tak naprawdę to nawet go nie lubię. Ale go szanuję. Linux nie jest aż taki świetny i jeśli nie zostanie zmieniony model rozwoju, to obstawiam, że ma małe szanse kiedykolwiek dogonić Solarisa."
Paru gości chciało dowiedzieć się, dlaczego Larry'emu wydawało się, że Linux nigdy nie dopędzi Suna, a Larry powiedział, że model open source'owy nie jest tak dobry jak model zamknięty. Ma wrażenie, że duże grupy ochotników nie są w stanie konkurować z małymi grupami opłacanych profesjonalistów.
Dodał też, że najlepszą rzeczą byłoby rozdzielenie pracy nad jądrem na dwie części: rozwijanie osobona jądra na maszyny jednoprocesorowe i wieloprocesorowe. Argumentował to tym, że uproszczenie technicznych problemów jest jedynym sposobem na wykorzystanie mniej wykwalifikowanych ochotników i ich pracy w celu konkurowania z komercyjnymi zespołami.
W trakcie długiej i zaskakująco pozbawionej wyzwisk, technicznej dyskusji, prowadzonej w odpowiedzi na cytowane poglądy, w pewnym miejscu wypowiedział się David S. Miller:
Ponieważ udało mi się z niczego zrobić pełny stos sieciowy (to znaczy moje gówienko nie śmierdzi i jestem tu by Ci to powiedzieć :-))) sądze, że Twoje poglądy są dość bezpodstawne.
Od początkowej implementacji do chwili, gdy wszelkie blokady zniknęły z jądra przy każdym obciążeniu, doszliśmy rozwiązując trzy zadania:
Czy ten obiekt jest prawie w całości oparty na odczycie? Jeśli tak, to należy użyć specjalnych blokad, aby to wykorzystać. Zobacz linux/brlock.h - jest tam przykład takiego ,,specjalnego blokowania'', które wymyśliliśmy w celu optymalnej obsługi takich przypadków.
Ta zmiana owocuje ZEROWĄ liczbą współdzielonych linii pamięci podręcznej, o ile początkowa analiza była poprawna.
Czy możemy rozdrobnić blokady tak, aby ludzie używający osobnych obiektów przez 99% czasu korzystali z różnych linii pamięci podręcznej?
To nie oznacza ,,więcej blokad dla każdego obiektu'', raczej ,,więcej blokad strefowych''. Blokady na każdy łancuch hasza łapią się do tej kategorii i są bardzo efektywne przy każdym obciążeniu, jakie kiedykolwiek widziałem.
Inne źródło problemów ze skalowalnością nie ma nic wspólnego z robieniem podziałów lub nie. Wciąż możesz napotkać sytuację, w której wiele procesorów chce (na przykład) trzecią stronę libc.so :-) (próbuję powiedzieć, że w pewnych klasach sytuacji problem ma naturę sprzętową)
Szczerze mówiąc, po zastosowaniu #1 i/lub #2 i/lub #3 w miejscu, w którym pojawia się problem (musiałem to zrobić w przypadku stosu ipv4), nie zostaje wiele trudności. I nie widzę żadnych powodów do dodania większej liczby blokad w ipv4. Nie sądzę również, że przesadziliśmy z ich liczbą.
Podkreślam - uważam, że bieżąca implementacja ipv4 w Linuksie skaluje się o wiele lepiej od czegokolwiek pochodzącego od Suna. Z mojej perspektywy, starania Suna o skalowalność polegają na wciskaniu na siłę blokad per obiekt tam, gdzie coś niepokojącego dzieje się w czasie profilowania, nie biorąc pod uwagę niczego innego. Ich stos sieciowy jest naprawdę duży i tłusty. Na przykład, informacje o gniazdku TCP w Solarisie są prawie 4 razy większe od linuksowych (tak było, kiedy ostatni raz przeglądałem ich nagłówki). I jak wszyscy wiemy, całość ich implementacji leży na szczycie jakieś grubej infrastuktury (np. strumienie - STREAMS). (OK, w tym miejscu ktoś powienien pokazać realistyczny test sieciowy, pokazujący, że skalujemy się gorzej niż Solaris. Z przyjemnością powitam taką ripostę, ponieważ wynikła dyskusja skonczyłaby się zapewne jakąś naprawdę prostą poprawką).
Konkludując: myślę, że skalujemy się tak dobrze, jak możemy w miejscach, gdzie wykonaliśmy kawał roboty (czyli również w warstwie sieciowej) i nie jest to spowodowane ,,zbyt wielką liczbą blokad''.
Problematycznym obszarem skalowalności, w którym dobrego rozwiązania nadal nie widać, jest odszukiwanie nazw plików w drzewiastych strukturach danych, tj. w dcache w Linuksie. Wszystkie dostępy są oparte na drzewie, i każdy startuje z podobnych korzeni. Nie można więc blokować poszczególnych węzłów czy gałęzi, bo każdy przemierza te same ścieżki. Co więcej, nie możesz użyć ,,specjalnych blokad'' z punktu #1, ponieważ ta struktura danych nie jest nastawiona głównie na odczyt, ani głównie na zapis.
Należy zauważyć, że klastry SMP/cc nie rozwiążą tego problemu.
Blokada dcache_lock uwidacznia się wyraźnie przy dużych obciążeniach w obecnym Linuksie. I tak samo źle będzie się to objawiać na klastrach SMP/cc. Klastry SMP/cc to dużo gadania typu ,,zrób z tego specjalny system plików i skaluj go tak, jak chcesz'', ale ja próbuję pokazać, to jeden z problemów dla którego dzisiaj nie ma ,,ewidentnego rozwiązania''.
Jeśli LLNL nie był zbyt zakręcony twoją propozycją, to w tej chwili ja bym ich nie obwiniał. Ponieważ z informacjami które mam teraz, myślę, że twoje twierdzenie o potencjale tego są iluzoryczne.
Naprawdę chciałbym, żeby ktoś wytknął mi błąd, ponieważ sprawa blokowania ścieżki wyszukiwania plików daje mi do myślenia, już od jakiegoś czasu.
Inne, co zauważyłem, to że zmiany skalowaności SMP, które pomagają w przypadku 8, 16, 32, 64 procesorów, prawie nigdy nie krzywdzą przypadku 4 czy 2. Ostatecznie, jak bodajże Ingo ostatnio wykazał, niektóre prace nad SMP poprawiły nawet pracę przy jednym procesorze.
W innym miejscu, Rik van Riel napisał, " Muszę się zgodzić z Larrym, że Linux naprawdę nie podąża w żadnym konkretnym kierunku i wydaje się, że postęp dokonuje się przez zwykłe szczęście. " Daniel Phillips wtrącił, "Przypominasz mi najbardziej znany cytat z Minnesota Fats: ,,Im więcej ćwiczę, tym więcej mam szczęścia''" A Linus Torvalds także odpowiedział Rikowi:
Hej, to nie jest błąd, to jest taki BAJER!
Czy wiesz co, w całym układzie słonecznym, z tego co wiemy, jest najbardziej złożonym cudem techniki?
Zgadnij co - to nie Linux, to nie Solaris i nie twój samochód.
To Ty. I ja.
I pomyśl skąd tak naprawdę się wzięliśmy - nie dzięki skomplikowanemu projektowi.
Jasne. ,,zwykłe szczęście''.
Tak, głupie szczęście, ORAZ:
Jestem śmiertelnie poważny: my, istoty ludzkie, _nigdy_ nie byliśmy zdolni do powtórzenia czegoś bardziej skomplikowanego niż my sami, a naturalna selekcja zrobiła to zupełnie bezmyślnie.
Doceńcie siłę przetrwania najlepszych jednostek.
I NIGDY nie myślcie błędnie, że umiecie zaprojektować coś lepszego niż osiągnięcie z masowego stosowania brutalnej metody prób i błędów ze sprzężeniem zwrotnym. To bardzo, bardzo pomoże waszej inteligencji.
Zupełnie uczciwie, Sun jest skazany. I nie ma to nic wspólnego z ich technicznymi doświadczeniami ani z ich stylem kodowania.
Rik odpowiedział zjadliwie:
Nie zapominaj o tym, że 2.4 jest pierwszym jądrem od czasu 1.2, dla którego udało Ci się osiągnąć stabilność przy dużych obciążeniach.
Zarówno 2.0 jak i 2.2 nie były stabilne do chwili, w której Alan je przejął, a linia 2.4 autorstwa Alana była stabilna 4 miesiące wcześniej niż Twoja.
Wydaje mi się, że już nieźle udowodniłeś jak dobrze działa losowy rozwój.
Alan uzpełnił krytyczne uwagi Rika, używając jako przykładu podsystemu pamięci wirtualnej:
Linus wciąż ignoruje, odrzuca i włącza konfliktujące ze sobą łatki. Linia -ac, od 2.4.9-ac czy coś z poprawkami Rika, które chciał dać Linusowi przeszło przez testy Red Hata. Coś koło 2.4.16 przechodzi je teraz.
To nie miało nic wspólnego z tym, że VM był zepsuty, a wszystko z tym, co zaaplikował Linus. Wygląda na to, że nowy VM jest wydajniejszy przy małych obciążeniach (co jest dobre), ale poprzedni VM wcale nie był złej jakości i nie był źle zaprojektowany.
Linus odrzucał nawet łatki poprawiające komentarze w kodzie VM, które to komentarze odnosiły się do starego zachowania. A z kompletnego braku dokumentacji VM wnioskuję, że odrzucił również komentarze i dokumentację od Andrei.
Stanislav Meduna spytał, czy zestaw testów Red Hata jest gdzieś dostępny. Chris Ricker i David podali adres http://people.redhat.com/bmatthews/cerberus/.
Wiele osób zaczęło uważać, że Linus proponuje losowe zmiany w kodzie, w nadziei, że ewolucja wybierze najlepsze rozwiązanie w ciągu kilku tysiącleci. Jak zauważył Tim Hockin "bardzo ciekawy argument, ale niezbyt stosowny. Nie mamy dziesiątek tysięcy lat, nie mamy nawet dziesiątek lat. Musimy używać naszego intelektu, aby wykorzenić pomysły złe na pierwszy rzut oka, ale również, co ważniejsze, pomysły złe-chociaż-nie-złe-na-pierwszy-rzut-oka. " Linus wyjaśnił:
Kierowana ewolucja - czyli ewolucja, która ma ściślej określone cele, szybsze karanie za błędy, działa w skali dziesiątek lub setek lat, nie dziesiątek tysięcy. Spójrz na hodowlę psów, albo lepiej na inwentarz domowy, gdzie zaledwie kilka dekad potrafi zrobić wielką różnicę.
Wiara, że ewolucja jest z konieczności powolna, jest totalnie bezpodstawna.
JEDNAKŻE, wiara, że _zbyt_ duże ukierunkowanie jest złe, z pewnością nie jest bezpodstawna; wykazuje problemy z projektem, które nie pojawiają się przy mniejszej kontroli. Ponownie, zbyt agresywna hodowla psów powoduje złą charakterystykę, zwłaszcza w przemyśle drobiowym.
Trzeba zdać sobie sprawę, że powyższe stworzenia są o wiele bardziej skomplikowane niż Twój program, i gdzie, ze względów historycznych, człowiek nie mógł właściwie wpływać na nic, poza selekcją.
Możliwość wpływu nie tylko na selekcję, ale również na _mutacje_, bezpośrednio skraca czas o kilka rzędów wielkości.
W skrócie, Twój komentarz o ,,niestosowności'' pokazuje tylko, że albo jesteś niedoinformowany o zmianach biologicznych, albo (co bardziej prawdopodobne) jest tylko odruchową reakcją bez _myślenia_.
Ewolucja biologiczna wciąż działa i ma się dobrze, i nie potrzebuje milionów lat aby dokonać zmian. W rzeczy samej, większość paleontologów uważa zmiany wynikłe wskutek katastrof naturalnych za zadziwiająco szybkie, zważając na _brak_ ,,inteligentnego kierowania''.
Oczywiście, ta sama ewolucja faworyzuje ,,stabilne'' formy życia (rekiny i wiele zwierząt wodnych nie zmieniły się zbytnio od milionów lat). Nie dlatego, że ewolucja jest powolna, ale po prostu dobre formy życia działają dobrze w swoim otoczeniu, i jeśli otoczenie nie zmienia się radykalnie, mają bardzo mało nacisków, na które muszą reagować.
Zmiany nie są automatycznie ,,dobre''. W rzeczy samej, jest wiele powodów _przeciwko_ zmianom, o czym często zapominamy w technologicznym świecie. Powolność ewolucji, przy braku powodów do ewoluowania, jest _dobrocią_, nie uderzeniem przeciwko niej.
W innym miejscu, Victor Yodaiken również nie kupił argumentu ,,ślepego szczęścia'': "Linux jest, czym jest, z powodu projektu, nie przypadku. I wiesz to lepiej niż ktokolwiek." Linus odpowiedział:
Bądźmy szczerzy, i przyznajmy, że nie został zaprojektowany.
Jasna sprawa, że jakiś projekt był - UNIX czyni szablon dla systemu. Co więcej, ułatwia ludziom komunikację, bo ludzie mają mentalny _model_ wyglądu systemu, co ułatwia dyskusję nad zmianami.
Ale to tak jak mówić, że masz zamiar zbudować samochód z czterema kołami i światłami - to prawda, ale diabeł tkwi w szeczegółach.
I wiem lepiej od wszystkich, że to co wyobrażałem sobie 10 lat temu, nie ma _nic_ wspólnego z dzisiejszym Linuksem. Z pewnością nie ma tu przemyślanego projektu.
Dalej będę twierdził, że nikt inny nie ,,zaprojektował'' Linuksa bardziej niż ja, i nie wątpię, że wiele osób się z tym nie zgodzi. Urósł. Urósł z wieloma mutacjami - a ponieważ mutacje były mniej niż losowe, były szybsze i bardziej kierowane niż cząsteczki alfa w DNA.
Victor powiedział także (nawiązując do stwierdzenia Larry'ego) "Pytaniem jest, czy Linux wciąż może być projektowany przy obecnym rozmiarze." Na co Linus odpowiedział w tej samej wiadomości:
Zaufaj mi, nigdy nie był.
Pójdę dalej, stwierdzam, że _żaden_ duży projekt programistyczny, który odniósł sukces na szerszym rynku (w przeciwieństwie do nisz) nie przeszedł przez wszystkie miłe cykle, o których uczą na zajęciach z Informatyki. Czy _kiedykolwiek_ słyszałeś o jakimkolwiek projekcie, który zaczął się od przemyślenia co jest potrzebne, poprzez rygorystyczną fazę projektu, aż do fazy implementacji?
Marzenia.
Oprogramowanie ewoluuje. Nie jest projektowane. Pytanie tylko, jak ściśle _kontrolujesz_ ewolucję, i jak otwarty jesteś na zewnętrzne źródła mutacji.
A próba zbyt silnego kontrolowania ewolucji zabije Cię. Nieuniknienie i skutecznie. Zawsze. W biologii i w przypadku programu.
Amen.
Horst von Brand również odpowiedział Victorowi:
Rzekłbym, że to lepiej, ponieważ mutacje (pojedyncze łatki) przechodzą przez bardzo _drobne_ sito, zanim znajdą się w ,,oficjalnych'' źródłach. Mamy do czynienia z populacją jąder (każdy deweloper ma kilka, dystrybucje również, inni, ...), tylko to, co przetrwa otrzymuje szansę włączenia.
Jasne, to nie jest jedyny sposób, w jaki Linux posuwa sie do przodu. Ale odgrywa ważną rolę w sukcesie ,,Udostępniaj wcześnie. Udostępniaj często. Bierz łatki zewsząd.''
Larry cały czas widział ,,ewolucję'', jako czysty nonsens, a Linusa -- jako bredzącego. Odpowiedział mu bezpośrednio:
Ta, racja, Linus. Powinniśmy wszyscy iść do domów, zebrać stado małp i kazać im uderzać w klawisze. Będą pracować tak samo dobrze, a wg. Twojego rozumowania osiągną sukces szybciej i nie będą marnować czasu na projekty.
Nie mogę uwierzyć w te brednie które rozsiewasz, myślę, że Ty również nie wierzysz. Jeśli jest inaczej, potrzebujesz przerwy. Dajmy ludziom eksplorować, niech oprogramowanie ewoluuje, to jest dobre. Ale ktoś musi trzymać wszystko na oku.
Jeśli to nieprawda, to przyznaj się, Linus. Nie jesteś potrzebny i *Ty* to właśnie udowodniłeś. Nie możesz mieć dwóch rzeczy naraz. Albo jesteś tu z jakiegoś powodu, albo nie. Więc jak? Spierasz się, że nie jesteś ważny. Osobiście się nie zgadzam, myślę, że Linux byłby kupą psiego łajna bez Ciebie. Jeśli Ty się nie zgadzasz, wycofaj się i zobaczymy co się stanie.
Daniel Phillips odpowiedział " Jeśli kiedyś byłeś zaangażowany w sesję projektową z Linusem - o ile można to tak nazwać - wiesz, że polega on bardziej na intuicji. Właściwie, abstrahując od roli wszechwiedzącego stwórcy, woli działać jak test na przetrwanie. Nie to, żeby brakowało mu zdolności, aby robić to tak, jak Ty chcesz. Myślę, że robi tak, jak robi, bo jest to zabawne i interesujące, i oczywiście, efektywne."
Linus również odpowiedział Larry'emu. Zahihotał na dźwięk słów ,,mieć oko'' na ewolucję oprogramowania "to tak, jakby ktoś musiał mieć oko na naszą ewolucję, żebyś miał szanse się pojawić?" A co do niezastępowalności, rzekł:
O, absolutnie.
Chciałbym, żeby więcej osób zdało sobie z tego sprawę. Niektórzy uzmysławiają sobie to dopiero, gdy są naprawdę wkurzeni na mnie i mówią ,,Goń się, mogę to zrobić po swojemu''. I wiesz co? Oni też mają rację, nawet jeśli dochodzą do tych konkluzji ze złych, wg mnie, powodów.
Powód, dla którego zajmuję się Linuksem to nie to, że czuję się ,,potrzebny''. Robię to, bo to lubię, i przypadkiem uważam, że jestem w tym lepszy niż większość. Może niekoniecznie lepszy od wszystkich wokół, ale wystarczająco dobry, i z pozycją społeczną, która czyni mnie nieprzebijalnym.
Ale ,,niezastąpiony''? Dorośnij Larry. Przypisujesz mi zbyt wiele.
I dlaczego powinienem wycofać się tylko dlatego, że nie jestem niezastąpiony? Czy Ty jesteś wymagany do przedłużenia istnienia ludzkości? Myślę, że nie, chociaż oczywiście możesz się nie zgodzić. Czy powinieneś się więc ,,wycofać'' ze swojego życia tylko dlatego, że ściśle rzecz biorąc nie jesteś naprawdę potrzebny?
Czy kieruję pewnymi sprawami? Tak. Ale, szczerze, robi tak wielu innych. Alan Cox, Al Viro, David Miller, nawet Ty. A także wiele firm, które są częścią ewolucji, świadomie czy nie. I wszyscy użytkownicy, którzy są de facto ,,testem przystosowania do przetrwania'' dla Linuksa.
I tak, wierzę w to co mówię.
Gdzie indziej dodał: "ludzie, którzy myślą że programy się ,,projektuje'' poważnie upraszczają sprawę i nie zdają sobie sprawy jak sami działają." A gdzieś jeszcze indziej:
Najbardziej uderzające jest to, że rozwój Linuksa może _wygladać_, jakby był zorganizowany.
Tak, ludzie czytają literaturę, ale jest to trochę zwodnicze. Najważniejsze są detale takie, jak limity czasowe kontroli zapchania łącza TCP - to bardzo _ważne_ detale, ale mówimy o kilkuset liniach spośród 20 _milionów_.
I nie, nie twierdzę, że reszta jest ,,losowa''. Ale _twierdzę_, że nie ma wspólnych celów, i większość rozwoju przebiega z bardzo losowych przyczyn - czyjeś szczególne zainteresowania lub podobne sprawy.
To ,,kierowana mutacja'' na mikroskopijnym poziomie, i z bardzo małym makroskopowym kierunkiem. Jest pełno indywidualistów z jakimś ogólnym pojęciem, jaki ma być system (a ja jestem oczywiście jednym z nich), ale w ostatecznym rozrachunku jesteśmy bandą ludzi bez spójnej wizji.
I to jest DOBRE.
Silna wizja i pewna ręka brzmią dobrze na papierze. Ale nigdy, _przenigdy_ nie spotkałem osoby (włącznie ze mną) której bym ufał i wiedział, że jest właściwą osobą na dłuższy okres.
Zbyt silna wizja może Cię zabić - przejdziesz przez krawędź, utwierdzony w przekonaniu o ścieżce przed Tobą.
Polegałbym raczej na ,,ruchach Browna'', gdzie mnóstwo mikroskopijnych kierowanych poprawek posuwa system powoli w kierunku, o którym żaden z indywidualnych deweloperów, nigdy by nie pomyślał.
I mocno wierzę, że aby zrobić wszystko _dobrze_, potrzebujesz grupy programistów, która będzie trochę dziwna i losowa.
Wracając do oryginalnego stwierdzenia - gdzie Larry stawia na piedestale Sunowską ekipę inżynieryjną za jej ograniczenie horyzontów i ścisłą kontrolę - i do stwierdzenia, że Linux jest lepszy ,,przez przypadek'': naprawdę wierzę, że to jest ważne.
Problemem z ,,ograniczeniem i ścisłą kontrolą'' (albo ,,projektem'') jest to, że owszem, dotrzesz z punktu A do B o wielę prostszą drogą, z mniejszym wydatkiem energii, ale jak U DIABŁA chcesz wiedzieć, gdzie właściwie chcesz skończyć? My nie wiemy, że B jest naszym celem.
Większość deweloperów nie zna nawet _pośrednich_ celów, nie mówiąc już o ostatecznym. Posiadanie kogoś, kto pokaże ci ,,jedyną słuszną ścieżkę'' może być bardzo miłe w ukończeniu projektu, ale mam takie silne odczucie, że o ile ,,jedyna słuszna droga'' czasami kończy się właściwie (a z inteligentnym przywódcą może być _prawie_ właściwa), to co jakiś czas jest to zdecydowanie zła droga.
I jeśli poruszasz się w pojedynczym pliku, w tym samym kierunku, musisz popełnić tylko jedną pomyłkę, aby zginąć.
Z drugiej strony, jeśli idziesz we wszystkich kierunkach naraz, może nie dojdziesz do miejsca gdzie _myślałeś_ że chcesz dojść, ale nigdy nie zrobisz naprawdę fatalnych pomyłek, bo zawsze musisz usatysfakcjonować wiele _różnych_ opinii. Otrzymujesz bardziej zbalansowany system.
To jest to, co rozumiem przez hodowlę, a problem z UNIXem polega na tym, że tradycyjnie firmy zajmują się jedną niszą.
(Firmy linuksowe też celują w nisze, ale raczej celują w _różne_ nisze, więc efektem końcowym jest ,,wiele różnych kierunków'', co jest tym, co myślę, że chcesz przetrwać).
Ingo Molnar zgodził się z Linusem, i odpowiedział na jego ,,jesteśmy bandą ludzi bez spójnej wizji'' tymi słowy:
Podstawowymi powodami, dlaczego tak się dzieje, są następujące, specjalne warunki na naszej planecie:
z powodu tych fundamentalnych problemów rozwój ,,technologii'' staje się bardzo, bardzo nieprzewidywalny. Mamy tylko 5 miliardów szarych komórek i brak możliwości aktualizacji. Projekty programistyczne takie, jak Linux są już na tyle skomplikowane aby przekroczyć ich możliwości. Wydajność ludzkiego mózgu plus pęd ku czemuś lepszemu (pociągany przez ludzkie potrzeby) powoduje, że tysiące ambitnych ludzi pracuje równolegle nad różnymi częściami Linuksa.
kilka wyjaśnień:
ale prawda jest taka, że my, ludzie mamy spore ograniczenia, nie rozumiemy tego losowego świata, więc nieuniknienie będziemy mieć sporo zabawy pisząc losowe kawałki linuksowego (lub innego) kodu przez najbliższe lata.
w rzeczy samej, większość książek informatycznych to świecący przykład ograniczeń ludzkiego mózgu i jak małą i bezużyteczną część świata potrafimy dokładnie wyjaśnić ;-)
szczerze, byłbym *bardzo* zawiedziony, gdyby było możliwe przewidzenie przyszłości, i gdyby można było zrobić wystarczająco idealny system, który nie wymagałby zmian w najbliższej przyszłości. Byłbym bardzo zawiedzioną i znudzoną osobą, bo ktoś przewidziałby co się stanie i moglibyśmy tylko głupio podążać za tym wielkim planem. Ale prawda jest taka, że ten wielki plan nie istnieje. Jedną z ekscytujących rzeczy w tworzeniu systemu operacyjnego jest to, że nigdy nie wiemy co jest za rogiem.
Całość znana jako Linux, może wygladać uporządkowanie na mikro-poziomie (ten świat też *ma* jakieś zasady wewnątrz chaosu), ale po prostu *nie może* być niczym lepszym niż losowość na poziomie makro (długoterminowym). Więc lepiej przyznajmy to i dostosujmy się do tego.
A ktoś, kto wie lepiej, wie coś, co jest warte tuzina nagród Nobla.
To była bardzo długa dyskusja.
2. Dokumentacja sieciowa
30 Nov 2001 - 9 Dec 2001 (21 posts) Archive Link: "Dokumentacja do CBQ jest, w końcu, prawie skończona"
People: Bert Hubert
Bert Hubert ogłosił
Po przygotowaniu mojego wystąpienia na temat CBQ/HTB (http://ds9a.nl/cbq-presentation), udało mi się w końcu zrozumieć, jak CBQ i filtry tak naprawdę działają. I zapisałem to. Sprawdźcie Linux Andvanced Routing & Shaping HOWTO, bardzo się zmieniło!
Zwłaszcza ta część jest bardzo nowa, sprawdźcie czy nie ma błędów i niejasności:
http://ds9a.nl/2.4Routing/HOWTO//cvs/2.4routing/output/2.4routing-9.html
Na dobry początek udało mi się rozpracować 'split' i 'defmap'. Nie ma żadnej innej strony w sieci, która by poprawnie mówiła, co te rzeczy robią.
Jeszcze jedno -- czy *ktokolwiek* rozumie, jak działają tablice haszujące w filtrze tc i wie, co one robią? Później chciałbym dostać trochę pomocy względem rzeczy związanych z nadzorem filtrów tc.
Jeśli zatem rozumiecie, jak te rzeczy działają, skontaktujcie się ze mną.
Kilka dni później odpowiedział sam sobie, dodając parę nowych rzeczy:
Dzięki Andreasowi Steinmetzowi i Davidowi Sauerowi, tablice haszujące tc są również udokumentowane. Dzięki!
Popatrzcie tu:
http://ds9a.nl/2.4Routing/HOWTO//cvs/2.4routing/output/2.4routing-12.html
A później ,,Filtry haszujące do bardzo szybkiego masowego filtrowania''.
Skończyłem także dokumentować wszystkie parametry dla TBF, CBQ, SFQ, PRIO, bfifo, pfifo i pfifo_fast. Wszystkie kolejki z jądra Linuksa są teraz opisane w Linux Advanced Routing & Shaping HOWTO, które to HOWTO znajdziecie pod adresem:
Chcę to wysłać na LDP i Freshmeat jakoś w przyszłym tygodniu i *naprawdę chciałbym*, aby ludzie, którzy mają pojęcie o tym (tak, mówię o Was: ANK & Jamal 8) ), to przeczytali.
To HOWTO szybko staje się dość autorytatywnym źródłem informacji o sterowaniu ruchem w linuksie (google przy szukaniu 'Linux Routing' znajduje tę stronę), więc mogłoby być poprawne! Zatem, jeśli będziecie mieli trochę czasu, sprawdźcie części, na których się znacie. Spodziewam się, że są błędy.
Ktoś, kto również był zaangażowany w tworzenie takiej dokumentacji, wtrącił się i odbyła się techniczna dyskusja na ten temat.
3. Nowe narzędzia do budowania jądra
2 Dec 2001 - 12 Dec 2001 (134 posts) Archive Link: "Przekształcania jądra 2.5 tak, aby wykorzystywało kbuild 2.5"
People: Keith Owens, Eric S. Raymond, Christoph Hellwig, David Woodhouse, Giacomo Catenazzi, Matthias Andree, Alan Cox, Dave Jones, Edward Muller, Horst von Brand
Keith Owens zaproponował:
Linus, nadszedł czas, aby przekształcić jądro 2.5 tak, aby wykorzystywało kbuild 2.5. Chcę to zrobić w kilku krokach, żeby było to mniej bolesne dla architektur, które nie zostały jeszcze objęte konwersją.
2.5.1 Półstabilne jądro, bio zaczyna działać.
2.5.2-pre1 Dodanie kodu kbuild 2.5, cały czas wykorzystującego Makefile-2.5. i386, sparc, sparc64 mogą używać kbuild 2.4 lub 2.5, ale wersja 2.5 jest zalecana. ia64 może używać wyłącznie kbuild 2.5. Inne architektury muszą cały czas używać kbuild 2.4. Czekamy 24 godziny na jakieś poważne problemy i wtedy --
2.5.2-pre2 Usunięcie kodu kbuilda 2.4, zmiana nazwy Makefile-2.5 na Makefile. Wersje dla i386, ia64, sparc, sparc64 mogą się kompilować z wykorzystaniem kbuild 2.5. Wersje na inne architektury nie będą się kompilować, dopóki nie zostaną przekształcone do kbuild 2.5. Grupa kbuild może pomóc przy konwersji, ale nie mając dostępu do odpowiednich maszyn, nie możemy przetestować tego. Użytkownicy tych architektur, do momentu przekształcenia, mogą pozostać przy 2.5.2-pre1.
Wykonanie zmiany w dwóch krokach powoduje powstanie platformy, gdzie będzie działać zarówno kbuild 2.4, jak i 2.5. To pozwoli innym architekturom na równoległe testowanie starego i nowego kbuilda przy konwersji, co wydaje mi się dość użyteczne.
Konwersja z CML1 na CML2 przyjdzie później -- w 2.5.3 lub 2.5.4.
Linus, czy to jest akceptowalne?
Linus Torvalds nie brał udziału w tym wątku, ale Eric S. Raymond odpowiedział Keithowi, mówiąc: "Z rozkładu jazdy przedstawionego przez Linusa na konferencji linuksowej, wynikało, że obie zmiany nastąpią pomiędzy 2.5.1 a 2.5.2. Wolałbym, aby nastąpiło to wcześniej niż później, bo mam już *naprawdę* *dość* równoległego utrzymywania dwóch zestawów reguł." Nieco później Christoph Hellwig spytał: "Czy włączenie CML2 jest już przesądzone? Ja cały czas nie jestem do tego przekonany i wiem, że wielu hakerów jądra ma podobne zdanie." Eric potwierdził nieuchronność włączenia CML2. W dalszym ciągu dyskusji powiedział: "tak przy okazji, to nie ma żadnego CML1 :-) Zamiast tego są cztery wzajemnie niezgodne dialekty oraz zestaw reguł, które bywają sprzeczne w zależności od użytego interpretera. No, może trzy wzajemnie niezgodne dialekty i jeden klon -- ale to jest niebywale trudne, aby stwierdzić, czy dwa interpretery akceptują ten sam język, więc właściwie nikt tego nie wie na pewno." Christoph odpowiedział:
Specyfikacja do języka CML1 istnieje i jest zapisana w pliku, konkretnie w Documentation/kbuild/config-language.txt w drzewie jądra. Jest narzędzie (mconfig), które wykorzystuje parser wygenerowany przez yacc, który implementuje poprawnie i w pełni tę specyfikację. Jest również parę paskudnych skryptów w drzewie jądra, które lepiej lub gorzej sobie radzą z parsowaniem tego języka. Jest jeszcze trochę innych narzędzi, o których wiem niewiele, a które również rozumieją ten język.
Wszystkie te narzędzia wymagają jedynie środowiska wykonawczego określonego w LSB i nie potrzebują żadnych dodatkowych i śmiesznych języków skryptowch. I nie potrzebują pośredniej, binarnej reprezentacji konfiguracji.
Eric skoncentrował się na części dotyczącej języka:
Po raz kolejny zacytuję Linusa ze szczytu dotyczącego jądra 2.5: ,,Python nie jest problemem.'' Używając tego typu argumentów czynisz sobie więcej szkody niż pożytku, przynajmniej do momentu, gdy Linus zmieni zdanie.
Jeśli chcesz się ponownie zająć sprawą ratowania CML1, najlepiej pokaż, jak w CML1 można zrobić następujące rzeczy: (a) automatyczne wykonywanie zamierzonych efektów ubocznych przy zmianie symbolu, (b) zagwarantowanie, że użytkownik nie może wygenerować konfiguracji, która narusza niezmiennik stanu, (c) unifikację drzewa konfiguracji tak, aby odpowiedniki plików arch/* nie miały problemów, gdy do jądra zostanie dodana jakaś, niezależna od architektury cecha.
Christoph powiedział, że dla niego i innych, Python jest problemem. Stwierdził, że CML1 jest w stanie zagwarantować wszystkie rzeczy, które wymienił Eric, ale nie widział potrzeby ich wykorzystania. Eric na to odparł: "Jeśli chesz, możesz spędzić cały tydzień mówiąc nam, jak łatwo zaimplementować zalety CML2 w CML1 -- ale jedną z reguł w tej grze jest to, że gram działającego kodu jest lepszy niż kilogram gadania." David Woodhouse odpowiedział:
W zasadzie to ja nie mam problemu z CML2. Zgadzam się, że CML1 jest dość ograniczony i widzę zalety powstania nowego języka.
Mam jedynie zastrzeżenia do innych pomysłów, które zostały wprowadzone, aby zmienić zachowanie reguł konfiguracyjnych, które nie są bezpośrednio związane ze zmianami w języku.
Chciałbym mieć pewność, że wprowadzenie CML2 nie spowoduje włączenia kontrowersyjnych zmian w zachowaniu konfigu, które mają uszczęśliwić Ciocię Klocię, podczas gdy te zmiany powinny być poddane pod indywidualną rozwagę, a nie przedstawiane, jako ukończone dzieło.
Jeśli nie mogę mieć jednego bez drugiego, wolę nie mieć nic -- CML1 być może obsysa, ale nie obsysa _aż_ tak.
Ale sądzę, że możemy Ci w tej kwestii zaufać -- nieprawdaż?
Eric spytał, czego tak naprawdę David chce, a David odparł: "Po prostu zapewnij mi to, żebym nie musiał przeszukiwać plików CML2 linia po linii pod kątem takich zmian oraz to, że pierwszy zbiór reguł CML2 będzie zgodny z zachowaniem CML1, bez wprowadzania żadnych kontrowersyjnych zmian." Eric odrzekł: "Ludzie, jak Giacomo i inni beta testerzy, pilnują mnie. Nie panikuj." Dodatkowo Giacomo Catenazzi również odpowiedział Davidowi na jego rozterki, wyjaśniając:
Reguły są niemal identyczne (ale zapisane w innym języku). Problem był przy konwersji reguł: esr znalazł wiele błędów: te błędy powinny zostać poprawione, więc i reguły się zmieniły.
Również przy konwersji reguł znalazłbyś błędy: np. zła składnia zależności, zła implementacja, ...
Nie sądzę, aby esr zmieniał reguły, które nie sprawiają problemów, z jednym wyjątkiem: wszystkie nieudokumentwane reguły, będą automatycznie zależne od CONFIG_EXPERIMENTAL. Nie podoba mi się to, ale rozumiem, czemu podjął taką decyzję.
Zapamiętaj: Pliki config.in zawierają wiele błędów i nie znajdziesz ich przy pomocy automatycznych narzędzi.
David i innni zaczęli oponować przy trzecim akapicie Giacomo, ale Eric szybko go poprawił mówiąc, że chodzi o CONFIG_EXPERT, a nie CONFIG_EXPERIMENTAL. Dodał:
ta zmiana nie jest sztywna. Zakomentuj tę deklarację w głównym pliku reguł:
condition nohelp on EXPERT
i to przywróci stare zachowanie.
David odpowiedział: "Dobrze. Zrób to, proszę, domyślnym zachowaniem przy pierwszej wersji CML2 w oficjalnym jądrze. Możesz wysłać łaty, które zmieniają to zachowanie później, i one będą mogły być rozpatrzone indywidualnie."
Gdzie indziej, wracając to tematu, czy jądro powinno zależeć od Pythona zainstalowanego w systemie, Matthias Andree spytał Christopha, co dokładnie ma przeciw Pythonowi. Alan Cox zauważył, że zależność byłaby od Pythona 2, co oznaczałoby, że większość użytkowników by go nie miała u siebie w systemie. Matthias odpowiedział:
Każde nowe jądro wymagało nowych narzędzi, 2.2 szczególnie wielu, 2.4 także kilku, więc to jest właściwie tylko jedno wymagane narzędzie więcej.
Obecne dystrybucje już zawierają Pythona 2 i przypuszczalnie, w momencie, gdy Python 2 będzie potrzebny do skonfigurowania Linuksa 2.5 czy 2.6, wszystkie będą.
Eric także uważał, że Alan przesadza z niedostępnością Pythona 2, ale dyskusja utknęła w tym punkcie.
Wcześniej w dyskusji Matthias powiedział: "Poważnie: czego się obawiasz? Że Twoje wysiłki włożone w mconfig się zmarnują? Linux 2.2 i 2.4 będą w użyciu jeszcze przez jakiś czas (nie jestem pewien co do mconfiga w 2.0, nie używam 2.0.x)." W tym momencie Eric przyznał:
Ups. Nie miałem zamiaru tego nikomu jeszcze mówić, ale skoro wysunąłeś ten argument, czuję że muszę stawić temu czoła...
Gdy CML2 udowodni swoją przydatność w 2.5, mam zamiar zwrócić się do Marcelo i namawiać go, aby zaakceptował CML2 w 2.4, motywując to tym, że zrobienie tego znacznie ułatwi opiekę nad jądrem. To jest przyczyna, dla której śledzę obie ścieżki po rozdziale zestawu reguł, więc będzie to łatwa podmiana zarówno dla Marcelo, jak i dla Linusa.
Giacomo wrzasnął:
Nie rób tego! Stabilne jądro powinno być stabilne również w odniesieniu do narzędzi do budowania. Gdy Marcelo poprawi kilka istotnych z punktu widzenia bezpieczeństwa systemu błędów, użytkownik będzie chciał przebudować jądro i okaże się, że musi zainstalować kilka nowych pakietów (komputery z 2.4 są już popularne, python2 -- nie tak bardzo), aby zabezpieczyć jądro i nie będzie szczęśliwy.
To jest przykład, ale lepsza zarządzalność spowoduje poważne problemy dla nowych użytkowników jądra.
Ale Eric powiedział, że ostateczna decyzja i tak należy do Marcelo. Ale także Alan uważał, że przeniesienie CML2 na grunt 2.2 byłby "dość niepraktyczny. Wyrzucisz wtedy do śmieci wszystkie istniejące narzędzia do konfiguracji stabilnej serii jądra 2.4, co do których ludzie oczekują, że będą działały. Zrobienie tego w 2.5 to nie jest wielkie halo, ale takie praktyki w stabilnej serii są bardzo be." Także Dave Jones przedstawił swoje obawy, mówiąc: "Więc każdy, kto jest zadowolony ze stwojej, nieco starszej dystybucji, która nie dostarcza pythona2-i-czego-tam-jeszcze, dostanie niespodziankę, gdy będzie chciał skompilować nowsze jądro. Fajnie." Edward Muller zauważył: "To jest problemem od dawna, jeszcze od czasów przed-pythonem2. Nowsze jądra potrzebują nowszych narzędzi. To zawsze był problem." Ale Alan odparł: "Nie w trakcie stabilnej serii. Tak naprawdę przeskoczyliśmy już kilka dużych przeszkód, aby egcs dalej kompilował działające jądro." Trevor Smith, trochę obok dyskusji, powiedział, że sądził, iż mówią jedynie o 2.5, ale Alan wyjaśnił: "Erik mówi o psuciu obu serii, a nie jedynie 2.5."
Gdzie indziej, w tym samym podwątku, Horst von Brand lamentował: "Dostaję dreszczy na myśl, że będę musiał się nauczyć jeszcze jednego dziwacznego języka, aby być w stanie dłubać w Linuksie... C, gcc-izmy z asm() i innymi, trochę CML1, teraz CML2 -- jestem w stanie strawić; ale teraz jeszcze Python..." Wiele osób zauważyło, że nie trzeba znać Pythona, aby używać CML2, ale Horst odpowiedział, że dłubanie w CML2 to jest dłubanie w jądrze i wymaga znajomości Pythona.
4. Rozwój 2.4
2 Dec 2001 - 8 Dec 2001 (25 posts) Archive Link: "[PATCH] 2.4.16 kernel/printk.c (sprawdzanie inicjalizacji dla każdego procesora)"
People: Andrew Morton, Marcelo Tosatti, David Mosberger
W trakcie polowania na babole, Andrew Morton zaproponował do 2.2:
Marcelo,
po dłuższej dyskusji, która odbyła się poza listą, wychodzi na to, że wyodrębnienie przypadków specjalnych w printk, jest przypuszczalnie najlepszym sposobem rozwiązania następującego problemu.
Problem polega na tym, że butujący procesor ładuje sterowniki konsoli i jest w stanie odwołać się do nich przy pomocy printk(), ale procesory aplikacyjne, w tym samym czasie, nie są w stanie wywołać printk(), ponieważ mapowanie sterownika urządzenia konsoli nie jest jeszcze wykonane. Odwrócenie tego wewnątrz kodu butującego ia64 jest skomplikowane i delikatne. Przypuszczalnie problem istnieje również na innych platformach, ale to jeszcze nie wyszło na jaw.
Tak więc, łata definiuje zależne od architektury makro `arch_consoles_callable()', które, jeśli nie zdefiniowane jest równoważne `1', tak aby wpływ na inne platformy (oraz jednoprocesorowe ia64) był żaden.
Marcelo Tosatti odpowiedział: "Jak trudne byłoby poprawienie tego w kodzie ia64? Nie bardzo mam ochotę to aplikować..." William Lee Irwin III podał kilka technicznych powodów, dla których należałoby to zrobić, a David Mosberger uważał, że prawdziwym pytaniem jest: "Czy zgadzasz się, że wywołanie printk() z kodu w C powinno być zawsze bezpieczne?" Alan Cox powiedział, że to może dobrze brzmieć w teorii, ale to w gestii opiekunów danej architektury leży zapewnienie tego. Marcelo także odpowiedział Davidowi, mówiąc:
Nie, jeśli nie masz dostępu do konsoli, aby wypisać komunikat :)
Ja po prostu wolałbym widzieć takie rzeczy poprawione w kodzie zależnym od architektury, zamiast mnożyć specjalne przypadki w ogólnym kodzie.
Ale David odrzekł:
Jedynie specyficzne dla architektury problemy powinny być rozwiązywane w kodzie specyficznym dla danej architektury.
Nie jestem przekonany, czy ten problem należy do tego gatunku. Być może jest, a jeśli tak, to będę zadowolony naprawiając to w kodzie ia64.
Ale, kontunuując, pokazał swoje wątpliwości co do tego. Marcelo odpowiedział: "Udowodnij to, proszę. Jeśli pokażesz mi, że dzieje się tak również na innych architekturach, z przyjemnością zaaplikuję tę łatę." David i Alan rozmawiali jeszcze chwilę o szczegółach implementacyjnych i wątek wygasł.
5. Grafik wydawania 2.4
6 Dec 2001 - 11 Dec 2001 (52 posts) Archive Link: "Linux 2.4.17-pre5"
People: Marcelo Tosatti
Marcelo Tosatti wypuścił Linuksa 2.4.17-pre5 i dodał: "Zamierzam od teraz wydawać wersje -pre trochę częściej, aby można było z mniejszym opóźnieniem ,,zobaczyć'', co robię. Mam nadzieję, że ułatwi to życie deweloperom."
6. Szamotanina deweloperów w 2.4
6 Dec 2001 - 10 Dec 2001 (23 posts) Archive Link: "devfs nie radzi sobie z uprawnieniami: 2.4.17-pre[4,5] / ALSA-0.9.0beta[9,10]"
People: Richard Gooch, Roman Zippel, Roman Zippel, Marcelo Tosatti
Rene Rebe zgłosił pewne dziwne zachowanie devfs w 2.4.17-pre4, a Richard Gooch odparł, iż udoskonalił zachowanie devfs w ostatniej wersji tak, aby odrzucało zduplikowane wpisy. Ale Roman Zippel opowiedział, że Richard nie powinien zmieniać zachowania w serii stabilnej, ponieważ taka opcja była poprawna aż do teraz. Richard odrzekł, " Nie, to nigdy nie była poprawna opcja. To zawsze był błąd. W każdym przypadku, ściślejsze zachowanie nie przeszkadza ludziom używać ich sterowników, po prostu wypisuje ostrzeżenie. Węzeł urządzenia stworzony w przestrzeni użytkownika wciąż działa." Roman odpowiedział, "Ale sterownik nie. Zmieniłeś API sterowników w bardzo subtelny sposób! Nie możesz zmienić zachowania devfs_register w 2.4. Rób, co Ci się żywnie podoba w 2.5, ale sterowniki zależą od obecnego zachowania i to devfs musi być naprawione, a nie sterowniki." Richard nie zgodził się z tym, że sterowniki przestaną działać. Powtórzył, iż nowy kod powoduje tylko ostrzeżenie. Roman zaprezentował, "devfs_mk_dir zwraca teraz błąd, więc sterownik nie będzie mógł uczynić nowych węzłów w /dev dostępnymi. Do tej pory można było spokojnie stworzyć katalog na devfs ręcznie, teraz nagle jest to błąd." Richard odparł, "To zawsze był błąd, ale od tego uciekaliście." Roman załamał się w tym momencie, pytając, jak Richard mógł spodziewać się, że ktokolwiek będzie brał devfs na poważnie, jeżeli "nagle zmieniasz zachowanie devfs w stabilnym wydaniu, w niekompatybilny sposób. Dystrybucje i ich użytkownicy, którzy podążyli za _Twoją_ radą, nagle są spieprzone, to jest nieodpowiedzialne." Wskazał na jeden ze skryptów Richarda, który wykazał dokładnie taki sam błąd, ale Richard odpowiedział beztrosko, "Ach, to zapis wariantowy tara. Powinienem to usunąć wieki temu. Chyba muszę któregoś dnia do tego przysiąść." Roman odpisał (kopię wysyłając do Marcelo Tosattiego), "Powinieneś to zrobić ponad rok temu. Zarządzanie prawami dostępu zapisu wariantowego tara było do tej pory prawidłową opcją i jest obecnie w użyciu. Nie było okresu ostrzegającego, iż ta cecha stanie się przestarzała." [...] "Rozwiązanie z tarem działa tylko do 2.4.16, nowy devfsd dostarcza to tylko przy 2.4.17. Pozostawię ostateczną decyzję Marcelo, czy to zaakceptuje, czy nie. Teraz będę cicho, może ktoś inny wyjaśni Ci znaczenie kompatybilności. " Marcelo, nie przeczytawszy całego wątku, poprosił Romana o szczegółowe wyjaśnienie problemu. Richard odparł:
Ja mogę to wyjaśnić. Stary rdzeń devfs wybaczał istnienie podwójnych wpisów, czego nowy rdzeń nie robi (przekazuje teraz błędy EEXIST).
Istnieją pewne, zepsute skrypty inicjujące (wzorowane na dawno już przestarzałym skrypcie rc.devfs), które wrzucają kupę i-węzłów do /dev, przed ładowaniem różnych modułów. Sterowniki, które są po tym ładowane, nie będą więc mogły stworzyć swoich wpisów w devfs (ponieważ stare wpisy wciąż istnieją).
Nie stanowi to problemu dla urządzeń w /dev, ponieważ urządzenia tworzone w przestrzeni użytkownika wciąż będą pracować. Zaowocuje to tylko ostrzeżeniem. Jest to natomiast potencjalny problem dla katalogów, jeżeli wszystkie wymienione warunki zostaną spełnione:
Jest to niezmiernie rzadki przypadek. Zazwyczaj, jeżeli ,,odtwarzasz'' pewne i-węzły, będziesz przywracał zarówno pojedyńcze wpisy urządzeń, jak i nadrzędne katalogi (w innym wypadku -- jaki jest sens odtwarzania?). Więc, w tym przypadku, wpisy urządzeń, których chce używać użytkownik, wciąż tam będą (stworzone przez skrypt inicjalizacyjny) i będą pracować poprawnie. Pojawi się tylko kupa ostrzeżeń.
Być może, w zależności od sterownika, wpisy urządzeń, które próbował stworzyć, mogą się pojawić w katalogu /dev, zamiast w zamierzonym podkatalogu. Mimo, iż jest to być może bałaganiarskie, nie jest tak naprawdę szkodliwe.
Wątek ten został zapoczątkowany z powodu raportu o dwóch błędach. Pierwszy z nich to nieszkodliwe ostrzeżenia o podwójnych wpisach. Nic się nie zepsuło.
Drugi błąd był spowodowany niewłaściwym plikiem konfiguracyjnym devfsd, który sprawił, iż katalogowi zostały nadane złe prawa dostępu. Z tego powodu Roman myślał, że nowy rdzeń devfs psuje te rzeczy. Jak pokazałem powyżej, możliwość zepsucia jest minimalna, wynika z przestarzałego skryptu.
Na powoływanie się Richarda na złe skrypty inicjalizacyjne, Roman odpowiedział: "Które są wciąż dołączone do drzewa jądra i przynajmniej Mandrake wciąż ich używa. Nie było znaków dezaprobaty, więc ludzie ich używają." Natomiast na oświadczenie Richarda, iż zachowanie jest wciąż takie samo, tylko wypisuje dodatkowe ostrzeżenia, Roman odrzekł, " Nie, to nie są tylko ostrzeżenia, zmieniło się API sterownika." Na stwierdzenie Richarda, iż wpisy urządzeń wciąż byłyby dostępne i działałyby poprawnie, Roman odpowiedział, " Z wyjątkiem tego, że dynamiczne uaktualnianie wpisów urządzeń nie będzie już miało miejsca; a więc wpływa to też na wszystkie wpisy urządzeń w katalogach (np. wpisy partycji nie będą już tworzone/usuwane). Nie będą również tworzone zdarzenia dla tych wpisów, więc konfiguracje od tego zależne też przestaną działać. " A na sformułowanie Richarda, iż jedyne uszkodzenie wystąpiło w nietypowej sytuacji, Roman ponownie eksplodował, ",,nietypowej sytuacji''??? Richard, to już nie jest zabawne. :-( BTW, zgodność wsteczna przy odtwarzaniu to, prawdopodobnie, tylko kilka linijek kodu, ale najpierw musiałbyś przyznać, iż jest to skopane."
Marcelo zapyał, "Richard, czy powyższe problemy zostały rzeczywiście wprowadzone przy zmianach?" Richard przyznał, iż były, ale dodał, że jakiekolwiek problemy mogą wystąpić tylko w bardzo rzadkich okolicznościach. Powiedział:
Generalnie, jeżeli tarujesz i roz-tarowujesz i-węzły, bierzesz cały katalog i odkładasz go ponownie. Nawet partycjonowanie jest rzadkim przypadkiem, ponieważ zazwyczaj instalujesz nowy dysk (tym samym -- nie masz nic do ,,odtworzenia'') i dopiero wtedy partycjonujesz. I nawet przestarzały rc.devfs zapisywał tylko i-węzły, które się zmieniły, nie wszystkie.
Jednakże, jeżeli to Cię interesuje, mogę wysłać Ci łatę, która efektywnie przywraca stare zachowanie dla katalogów. To tylko sprawa łapania właściwej blokady, zmiany flagi i zwrócenia innego wpisu. Ale zdecydowanie chcę pozostawić komunikat z ostrzeżeniem. Chcę, żeby zabolało to trochę zepsute, lub całkowicie przestarzałe konfiguracje.
Marcelo odparł, iż można zostawić to ostrzeżenie, ale zmiana zachowania powinna wylądować w 2.5. Koniec Wątku (tm).
7. Rozbieżność pomiędzy 2.4 i 2.5
10 Dec 2001 (9 posts) Archive Link: "Łaty, które są w 2.4.17-pre2, a nie ma ich w 2.5.1-pre8"
People: Alan Cox, Marcelo Tosatti, Nicolas Aspert, Robert Love
Adrian Bunk myślał, że łaty, które wędrują do 2.4, normalnie powinny lądować również w 2.5; zauważył jednak, że mnóstwo łat nie znalazło się w 2.5, pomimo iż zostały dołączone do 2.4. Alan Cox wyjaśnił, "W wielu wypadkach nie jest to prawdą, dla wielu oczekujących łat jest bezcelowym łączenie ich z 2.5 przed tym, jak 2.5 osiągnie lepszy kształt. Powtórne ich sprawdzenie, tak jak zrobiłeś to Ty, jest potrzebne, ale nie przed uzyskaniem przez warstwę blokową jakiejś namiastki ukończenia." Nicolas Aspert spotkał się z odwrotną sytuacją. Wysłał łatę, która natychmiast znalazła się w 2.5, ale Marcelo Tosatti nie zaakceptował jej do 2.4. Marcelo odparł:
Kto jest opiekunem sterownika?
Spróbuj myśleć od mojej strony: mogę nie mieć sprzętu, lub czasu, aby przetestować wszystkie łaty, które do mnie trafiają.
Proszę Was, wysyłajcie tego typu zmiany sterowników ludziom, którzy znają szczegóły specyficzne dla sprzętu.
Jeżeli kod i810 nie ma opiekuna, będę rad, dołączając kod do 2.4.18pre i czekając na raporty. Jednak nie włączę go do 2.4.17.
Alan odpowiedział z uśmiechem na drugi paragraf wypowiedzi Marcelo, "Dokładnie. Właśnie po to jest 2.4.x-pre_1_ 8) "
Nicolas powiedział, że plik MAINTAINERS nie wskazał opiekuna, więc wszystkie łaty musiały powędrować do Marcelo. Dodał jednak, "Ty jesteś szefem ;-) Jak mówiłem, mam conajmniej 3 pomyślne raporty na temat tej łaty, a fakt, iż Linus dołączył ją do swojego drzewa, utwierdza mnie w przekonaniu, że nie może w niej być zbyt wielu popsutych rzeczy. Wybór, czy umieścić ją w 2.4.17, czy w 2.4.18, jest wyłącznie Twój; przyjmę go, jakikolwiek będzie. Daj znać ;-)" W tym miejscu, Robert Love wtrącił, "Opiekun jest Zaginiony W Akcji. Ja ostatnio pracowałem trochę nad tym sterownikiem. Mogę potwierdzić, że łata Nicolasa jest poprawna." Marcelo odpowiedział prosto, "Poczekajmy z tym do 2.4.18pre, OK? "
8. Filozofia rozwoju 2.4
10 Dec 2001 (5 posts) Archive Link: "Linux 2.4.17-pre8"
People: Marcelo Tosatti, Oliver Xymoron
Marcelo Tosatti ogłosił 2.4.17-pre8, mówiąc, "Oto pre8: następne będzie już -rc1, więc nie przysyłajcie mi już proszę żadnych łatek, poza poprawkami. Nowości będą czekać w kolejce do 2.4.18-pre1." Załączył jednolinijkową listę zmian, na co Oliver Xymoron odpowiedział "Chciałbym zasugerować, aby łaty zawierały listę zmian. Generalnie chodzi o to, żeby łaty miały plik patch.foo, który zawiera wpis do listy zmian; opiekun uruchamia skrypt, przygotowujący jądro do wypuszczenia, który łączy ze sobą wszystkie pliki patch.*, a następnie albo dołącza je do obecnego ChangeLoga (lepsze wyjście), albo je kasuje. Byłoby to znacznym ułatwieniem, ludzie znaliby szczegóły poprawek, nie zawracając głowy Opiekunowi. Jedną z dróg, aby to rozpocząć, byłoby zebranie do kupy wszystkich istniejących list ze zmianami, dodanie ich do pliku ChangeLog, oraz dodanie adnotacji o tym, że plik ten generowany jest automatycznie." Marcelo odparł, "Zdaję sobie sprawę, że jest to o wiele lepsze rozwiązania... Jednakże chcę teraz spędzać wolny czas nad polepszaniem stanu 2.4." Na co Oliver odrzekł, "Chyba słusznie. Być może prześlę Ci łatę/skrypt po wydaniu kilku 'kropkowych' jąder."
Sharon And Joy
Kernel Traffic is grateful to be developed on a computer donated by Professor Greg Benson and Professor Allan Cruse in the Department of Computer Science at the University of San Francisco. This is the same department that invented FlashMob Computing. Kernel Traffic is hosted by the generous folks at kernel.org. All pages on this site are copyright their original authors, and distributed under the terms of the GNU General Public License version 2.0. |