W ciągu kilku ostatnich tygodni, Alexander von Gluck aka kallisti5, dokonał dużego postępu w portowaniu nowej Mesy 3D do Haiku. Przez ten okres czasu opracował serię patchy które dodano do kodu źródłowego Mesy 3D i niemalże zakończył trzy etapy z pięciu, które są niezbędne do ukończenia bounty. Sama aktualizacja Mesy jest już gotowa w 99% i są wymagane jedynie poprawki i testy.
Z racji tego, że Haiku w wersji R1 ma być zgodny binarnie z BeOSem w wersji R5, Haiku występuje w dwóch wersjach. Oficjalne Haiku jest kompilowane za pomocą GCC 2 i nosi nazwę gcc2h (h oznacza hybrid czyli, że zawiera biblioteki GCC 4 dzięki którym działają aplikacje skompilowane w GCC 4 – a takie wymagania/zależności ma większość dzisiejszego oprogramowania i portów). Druga wersja jest nieoficjalna( dostarczana przez developerów Haiku), z której korzysta większość użytkowników, to gcc4h, czyli jest kompilowana za pomocą czwartego GCC i posiada biblioteki z wersji GCC 2. Istnieją też “standardowe”, mało istotne wersje z bibliotekami jednego rodzaju( gcc2 bądź gcc4). Haiku R1 będzie właśnie posiadać dwa API. Jedno dla starych, BeOSowych aplikacji( GCC 2) i drugie dla nowych( GCC 4). Dlaczego tak jest? Po bankructwie Be Inc. i upadku BeOSa (firmę wykupił Palm i źródła stały się jego własnością intelektualną – później wchłonięte przez ACCESS Co. i jedynie uwolniono kody źródłowe paru aplikacji systemowych, jeszcze za nieboszczki Be Inc. np. OpenTracker) zaprzestano rozwijania aplikacji dla BeOSa i w większości przypadków nie uwolniono programów na zasadach open source. Następnie twórcy kompilatora GCC wprowadzili w nim zmiany, które doprowadziły do zerwania wstecznej kompatybilności. Aplikacje dla Haiku które posiadają API napisane w C++, muszą być na nowo kompilowane z poprawkami w kodach źródłowych. Problemu by nie było, gdyby programy dla BeOSa były rozwijane na bieżąco. Wtedy twórcy systemu i aplikacji dla niego, mogliby drogą ewolucji łagodnie przystosowywać system pod nowsze wersje GCC.
API i ABI GCC 4 w pierwszym Haiku nie będzie w przyszłości rozwijane, tzn. programy w nim skompilowane dla Haiku R1 nie będą kompatybilne z wersją Haiku R2. Wersja R2 będzie posiadać zamrożone API GCC 2 i nowe GCC 4, jednocześnie developerzy nie planują wrzucać do następcy obsługi API GCC 4 z wersji R1 – nie chcą mnożyć API w następcy. Z powyższych powodów wersja gcc4h Haiku nie jest tą oficjalną(może to ulegnie zmianie w przyszłości pod wpływem różnych czynników) ale nic nie stoi na przeszkodzie by z niej korzystać tak jak to robi większość użytkowników, którzy chcą korzystać z aplikacji skompilowanych w GCC 4 – niektóre porty nie chcą poprawnie działać w wersji gcc2h, gdzie przykładowo media_server jest również w GCC 2, tak jak całe bebechy systemu.
Dla Haiku w wersji gcc2h będzie dostępna tylko Mesa 7.8.2. Mesa 8.0 i jej kolejne wersje, będą tylko w wersji gcc4h Haiku, gdyż w kolejnych rewizjach Mesy zaimplementowano GLSL i twórcy Haiku chcąc udostępnić nowsze wydania Mesy dla starego API, musieliby utrzymywać fork – co byłoby bardzo pracochłonne i wymagało więcej niż jednego developera, który tym się teraz zajmuje w Haiku. Kod C++ GLSL nie jest przyjazny dla kompilatora GCC2. Alexander jest bardzo zadowolony z tego, że jego patche zostały dodane do kodu źródłowego Mesy i wersja 8.0 buduje się w Haiku tylko z niewielką pomocą z jego strony. Budowania Mesy w Haiku polega na zdalnym pobraniu z serwera Opcjonalnego Pakietu Mesa 3D i użycia różnych plików binarnych i nagłówkowych do utworzenia libGL (za pomocą Haiku OpenGL Kit). W tej chwili projekt Haiku utrzymuje swój własny fork biblioteki GLUT która to nie jest już aktywnie rozwijana przez zespół Mesy. GLUT był i jest bardzo ważny dla świata BeOSa i Haiku, dlatego jest nadal sens w utrzymywaniu własnego rozwidlenia kodu. Możliwe, że w przyszłości GLUT zostanie zastąpiony w Haiku przez którąś z jego alternatywnych implementacji np. Freeglut. GLUT został przeniesiony z src/lib/mesa/glut do src/lib/glut a pliki z src/lib/mesa zostały usunięte. Teraz w Haiku wróciliśmy do punkty wyjścia, ale z nowym OpenGL Kit bazującym na bibliotece Mesa 3D i programowym renderowaniem, oraz otwartą drogą do akceleracji sprzętowej.
Nie obyło się też bez błędów. Na przykład demo GLTeapot ma drobne problemy z wyświetlaniem, może być to spowodowane przestarzałym kodem GLTeapot lub jakimś błędem w programowym renderze. W demie Haiku3d obracające się litery pozostawiają za sobą ślad, problem prawdopodobnie jest związany z przestrzenią kolorów bo występuje jedynie u użytkowników mających ustawione 32 bity głębi w systemie. Także w tej chwili jest pojedynczy bufor, podwójny na obecną chwilę wiesza aplikacje GL. Prawdopodobnie pojedynczy bufor powoduje to, że w GLTeapot czajnik miga gdy się umieści nad nim kursor.
GLTeapot na przeciętnym obecnie sprzęcie działa w Haiku z prędkością 300-400 FPS( software render), a gdy Haiku jest wirtualizowane za pomocą Qemu, to wynosi to około 16 FPS. GLTeapot działał na jego komputerze przez wiele dni i nie zaobserwował on żadnych wycieków pamięci.
Teraz pozostaje nam jedynie czekać na sterowniki i sprzętową akcelerację.
kallisti5 dziękuje wszystkim za wsparcie, komentarze i wpłaty na bounty. Przede wszystkim dziękuje zespołowi Mesa 3D za bezproblemową współpracę.
Poniżej prezentuję wywiad z Alexandrem, jaki udało mi się przeprowadzić z nim 22 stycznia 2012 roku:
Alexander von Gluck IV aka kallisti5
Premislaus: Na sam początek chciałbym Ciebie zapytać kim jesteś, skąd pochodzisz, jak znalazłeś się w projekcie Haiku i skąd Twoje zainteresowanie sterownikami kart graficznych?
kallisti5: Miło mi Cię poznać! Jestem Alexander von Gluck IV, mam 26 lat i urodziłem się i żyję w Teksasie, w pobliżu Houston. Projekt Haiku poznałem wiele lat temu, gdy szukałem informacji na temat mojego ulubionego przez długi czas, systemu operacyjnego jakim był BeOS. Wtedy to chciałem zrobić stronę internetową która mogłaby zastąpić BeBits.
Trochę pokopałem i znalazłem mój post na ten temat, na liście mailingowej Haiku – http://www.freelists.org/post/haiku/Haiku-software-site
Jak pamiętam, to zawsze pragnąłem poznać działanie komputerów na ich jak najniższym poziomie funkcjonowania. W okolicach roku 2003 próbowałem samemu napisać hobbystycznie jakiś system operacyjny( byłem wtedy bardzo początkującym programistą).
Przez wiele lat starałem się dobrze nauczyć C i C++. Co prawda nie wszystko umiem w tych językach napisać, nie jestem bardzo zaprawiony, doświadczony w tym… Najbardziej komfortowo pisze mi się w PHP.
Mój pierwszy sterownik jaki napisałem dla Haiku, to był sterownik USB WiMax dla urządzeń z chipsetem Beceem. Sterownik Beceem był moim pierwszym doświadczeniem w pisaniu i projektowaniu sterowników. To wtedy nauczyłem się co należy robić i jak, a jak nie. Rozwój swojego sterownika zawiesiłem, ze względu na spadek użycia WiMax w USA.
http://cgit.haiku-os.org/haiku/tree/src/add-ons/kernel/drivers/network/wwan/usb_beceemwmx
Moje zainteresowanie sterownikami kart graficznych w Haiku wzięło się z tego, że Urias
McCullough( jeden z developerów Haiku) rzucił mi wzywanie na kanale IRC Haiku, bym zajął się sterownikiem radeon_hd. W tym celu przekazał mi kartę graficzną Radeon HD 4350, bym mógł się tym zająć. Wstydliwie muszę przyznać, że przez lata byłem fanem Nvidii i kupowałem ich kart graficzne ze względu na ich wsparcie w Linuksie. Ten Radeon okazał się być pierwszym Radeonem którego używałem przez długi okres czasu.
Premislaus: Dla których kart graficznych w pierwszej kolejności zrobisz sterowniki?
kallisti5: Chciałbym w pierwszej kolejnosći zająć się Radeonami HD, od chipu R600 wzwyż. Sterowniki do nich są najlepiej rozwinięte w Gallium 3D. W każdym razie jeszcze nie zdecydowałem.
Premislaus: Czy myślisz, że kiedyś otwartoźródłowe sterowniki będą kiedyś wydajniejsze, lepsze od własnościowych, jeżeli prace nad nimi będą postępować tak jak teraz?
kallisti5: Myślę, że pewnego dnia tak. Sam naocznie przekonałem się ile AMD włożyło pracy w rozwój otwartych sterowników, poświęcając temu kilku developerów. Słyszałem także, że Intel nie próżnuje i otwiera specyfikacje swoich chipów graficznych.
Premislaus: Jak myślisz, kiedy możemy spodziewać się wsparcia dla OpenCL w Haiku?
kallisti5: AMD i Mesa od kilku miesięcy ciężko pracują nad dodaniem OpenCL w Gallium 3D( za pomocą LLVM).
Mesa pracuje nad uzyskaniem wsparcia dla OpenCL w Gallium 3D, a ja pracuję nad wsparciem Gallium 3D w Haiku… Myślę, że wkrótce :).
Premislaus: Co myślisz o PowerPC? Poświęciłeś tym procesorom jedną z notek na swoim blogu i napisałeś trochę kodu. Czy tak jak inni developerzy Haiku miałeś kiedyś któryś ze starych komputerów, może; ZX Spectrum, Atari, Commodore, Amiga, Amstard, etc? I stąd ten sentyment? Myślę, że przy tak małej społeczności i liczbie developerów powinniśmy się całkowicie skupić na architekturze x86. Zwłaszcza, że inne architektury są słabo dostępne i bardzo drogie, a z ARM nie zrobimy sobie PeCeta chyba, że dopiero architektura ARMv8 to zmieni.
kallisti5: Tak na prawdę to nigdy nie miałem innych komputerów niż zgodne z IBM, x86. Były one przed moim czasem( chociaż interesuję się starymi komputerami).
Aktualnie interesuję się PowerPC w typowo nerdowsko-techniczny sposób. Na co dzień jesteśmy zanurzeni w x86 i przyjemnym orzeźwieniem jest spojrzenie na stare komputery i inne architektury. Osobiście chciałbym pewnego dnia zobaczyć jak Haiku działa na PowerPC, nawet jakby nie było innego powodu niż taki, że ten interesujący sprzęt leży sobie zakurzony i porzucony przez Apple. Myślę, że byłoby to ciekawe hackowanie. Oczywiście zgadzam się, że przy takich środkach powinniśmy się skupić na x86, ale podczas pisania i projektowania kodu powinniśmy myśleć o innych platformach, że pewne rzeczy mają się inaczej tam i że pewnego dnia będziemy uruchamiać Haiku na innych architekturach.
Premislaus: Jak oceniasz całokształt rozwoju Haiku? Co Ci się podoba a co nie? Co byś zmienił? Co by można było zrobić lepiej?
kallisti5: Ja zawsze lubiłem pracować dla Haiku. Chciałbym tylko by było jak najwięcej utalentowanych programistów pomagających Haiku, niż tej pomocy było potrzeba( tu był idiom, wskazówka dla mnie bym się zajął pisaniem kodu przyp. red.).
Premislaus: Co myślisz o tym, że większość użytkowników prawdopodobnie będzie migrować na wersję gcc4h Haiku, gdzie będą cieszyć się sprzętową akceleracją i innymi rzeczami? Że wersja gcc2h może być używana jedynie przez developerów?
kallisti5: Pełna kompatybilność z BeOSem na poziomie ABI, zawsze będzie celem projektowym dla wersji R1 Haiku.
Ja osobiście czuję, że wraz z upływem czasu maleje sens posiadania klonu BeOSa zgodnego z GCC 2. Jest coraz mniej przypadków użycia BeOSowego, zamkniętego oprogramowania napisanego w latach 1997-2001. Nie mówię, że zgodność binarna jest zła… Myślę, że zbyt dużo czasu na tym skupialiśmy się. Jest coraz trudniej kompilować nowoczesne oprogramowanie za pomocą GCC 2, który jest już wiekowy i gdzie mamy m.in. brak standardu c99. GCC 2 nie jest już kompilatorem dla żadnego projektu.
Prywatnie chciałbym aby wersja gcc4hybrid stała się tą oficjalną ale wiem, że dużo ludzi nie zgadza się ze mną i mają ku temu swoje powody.
Premislaus: Czy grasz w jakieś gry i czy Haiku może stać się dobrą platformą dla gier( gry niezależne)?
kallisti5: Nie jestem jakimś zapalonym graczem, ale chciałbym zobaczyć Minecrafta pod Haiku.
Wcześniej dłubałem trochę przy paru portach gier indie dla Haiku. Nie jest to zbyt trudne zadanie, zwłaszcza dla gier napisanych z użyciem SDL.
Premislaus: Jakich programów najbardziej brakuje Ci w Haiku?
kallisti5: Tak po prawdzie to niczego. Sam od bardzo dawna używam Linuksa na swoim komputerze. Haiku używam codziennie, ale Linux nadal napędza mój desktop.
Premislaus: Na sam koniec chciałbym zapytać czy miałeś jakikolwiek kontakt z polską społecznością Haiku? Jeśli tak to jakie odniosłeś wrażenie? Czy masz jakiekolwiek skojarzenia z Polską i czy znasz jakieś słowa po polsku ;)?
kallisti5: Niezbyt wiele, Teksas jest trochę odizolowany :P.
Niestety z powodu natłoku obowiązków, Alexander nie mógł mi odpowiedzieć na dwa pytania. Jedno dotyczyło anegdot z życia społeczności, zlotów fanów systemu i zespołu programistów Haiku. Drugim pytanie było to, czy różnice w architekturach systemów Haiku i Linuxa mogą spowodować to, że Mesa 3D może działać szybciej na Haiku, lub odwrotnie. Pytanie dotyczyło ogólnie wydajności OpenGL i czy może być lepiej niż na Windowsie.
Dodaj komentarz