WarpUp your PowerUp?

Petr Krenželok

Již v minulém čísle AMIGA Review jste se mohli seznámit s tak dlouho očekávanými kartami od Phase5, které, kromě radosti uživatelů z poměrně slušného výkonu, přinesly sebou i řadu otázek, živých diskusí, ale bohužel i hádek a vzájemného osočování ze strany vývojářů různých firem. A protože se zdají z hardwarového hlediska být PowerUp karty zcela v pořádku, je zřejmé, že konflikt se týkal softwaru, dodávaného k těmto kartám.

Před tím, než se pustím do dané látky, dovolte ještě několik komentářů. Připadám si totiž úplně stejně, jako když jsem psal článek o výstavě v Kolíně - spousta různého materiálu na stole, nesouvislého, vzájemně se tématicky překrývajícího, ale co je ještě horší, a proč zde tuto paralelu uvádím, je fakt, že „opět nejsem přítomen.“ Chci tím jen říct, že přestože se věnuji programování, nemám téměř žádné zkušenosti s nižšími jazyky typu assembler či C, takže prosím o jistou shovívavost ze strany „skutečných“ programátorů. Co se týče hardwaru jsem na tom samozřejmě podobně.
Takže co že se to vlastně přihodilo? Co znamená první slovo nadpisu? Nebojte se, všechno se postupně dozvíte, ale musíme začít hezky popořádku a neslušné by bylo hned na úvod vynechat vlastního výrobce PowerUp karet, společnost Phase5, u které se chvíli zdržíme....

Phase5
Abych pravdu řekl, mé zkušenosti s Phase5 nejsou velké, ale zato ani příliš růžové. Nemám nic proti jejich produktům, to ne, koneckonců jsem spokojeným uživatelem turbokarty Blizzard. Jedná se mi však o přístup této společnosti k uživatelské základně, popřípadě konkurenčním firmám. Neschopnost navenek komunikovat, arogance vůči okolnímu světu, téměř pravidelné značné zpoždění vydání ohlášených produktů, to vše jsou rysy vlastní Phase5. A protože zde nyní hodlám použít materiály nacházející se na jejich webovské stránce, rád bych upozornil, abyste je brali střízlivě. Osobně totiž Phase5 neodpustím článek „Breaking through the barriers“, který s nejčistším svědomím zveřejnila na své stránce, a který byl pro mě zatím tou největší kachnou, na kterou jsem kdy naletěl. Ted se však vraťme k vlastním materiálům, protože ty mnohým z nás přinejmenším názorně přiblíží, jak vlastně karty PowerUp fungují.

Multiprocessing
PowerUp karty a jejich systémový software byly od samého počátku návrhu vytvářeny s ohledem na schopnosti multiprocessingu. Jsme přesvědčeni, že každý pokročilý a progresivní OS musí v sobě obsahovat podporu multiprocessingu. A tak jsme se zaměřili hlavně na tuto oblast.
Již současné PowerUp karty používají oba procesory po vzoru paralelního multiprocessingu. Ačkoliv oba procesory dynamicky sdílí tutéž sběrnici, je pro oba zaručen dostatečný přístup do paměti, protože maximální propustnost paměti je odhadem 200 MB/sec. Dynamické přidělování (alokace) sběrnice znamená, že pokud kterýkoliv z procesorů požádá o nepřerušený přístup do paměti, má garantovány čtyři burst cykly přístupu; pokud jeden z procesorů nepotřebuje momentálně s pamětí pracovat, jsou tyto cykly přiděleny procesoru druhému. (Pozn.: burst = 4 cyklový přístup do paměti. burst 060: 4^32=16 bajtů, burst PPC: 4^64=32 bajtů) Logické analyzátory při testech prokázaly, že dokonce při velké současné zátěži obou procesorů, tyto velmi často uvolňují sběrnici, což umožňuje připojení i jiných zařízení jako SCSI DMA nebo dalšího CPU. Výpočty Mandelbrotových množin nebo dekódování MPEG signálu vyžaduje, aby PPC odečítal velké množství dat pomocí burst přístupů, přičemž během výpočtů zbývá dost času na to, aby mohla být sběrnice uvolněna pro jiné účely. Tato doba se pak využívá například pro práci s 68K procesorem, který mezitím může zpracovávat jiné úlohy, jako jsou například systémová volání, příprava dat pro další PPC task, nebo zpracování dat navrácených od samotného PPC procesoru.
Abyste však dosáhli maximálního možného výkonu multiprocessingu, musí se software přizpůsobit hardwarovému řešení. Použitím systému zasílání zpráv (message system) připraveného pro multiprocessing je možné přidat další procesor, ale i například speciální GL 3D procesory nebo DSP, nebo mít dokonce cluster síťových systémů pracujících na jedné konkrétní úloze. Aplikace používající PowerUp software jsou na toto vše připraveny bez dalších nebo jen s malými změnami.
Návrh koncepce pro multiprocesorovou PowerUp kartu, která by měla být na trhu ještě v roce 1998 je již hotov. Tento PowerUp systém bude mít jeden 68040 nebo 68060 procesor, čtyři PPC604e procesory taktované na 200 - 400 MHz a bude rovněž obsahovat 128 bitové SDRAM. Tento systém, vybavený čtyřmi PPC604e/300 MHz procesory bude stát přibližně 3 500 - 4 000 USD a dosahovat výkonu přibližně 40 - 50 SpecFP95, což posune 3D aplikace na absolutní úroveň pracovních stanic. Každá aplikace vyvíjená podle našich doporučení bude ihned schopna využít možnosti této nové karty. Předpokládáme, že bychom mohli tuto kartu dodat v létě 1998 a již jsme rovněž kontaktovali dodavatele 3D softwaru, kteří se o toto řešení velmi zajímali.
Udržujeme kontakt s různými výrobci procesorů, a protože jsme podepsali NDA (pozn.: protokol o nešíření informací), máme přístup k mnoha informacím, takže považujeme za nutné, aby začal vznikat software připravený pro multiprocessing.

Message system
PowerUp software pracuje na bázi asynchronního systému zasílání zpráv, který umožňuje zasílat signály a data mezi různými úlohami a nezávisí na tom, na kterém procesoru daná úloha běží. Tento message systém umožňuje velmi rychlou výměnu dat mezi různými softwarovými moduly (tasky nebo thready) bez nutnosti kontextového přepnutí, i když tyto moduly běží na odlišných CPU. Aplikaci je lhostejné, kolik CPU se nachází v lokálním systému, nebo zdali jsou tyto CPU přítomny na lokální síti, a dokonce jakého typu dané CPU jsou.
Tento message systém je schopen přenášet signály bez dat za méně než 7 mikrosekund. Přenos uživatelských dat je rovněž velmi rychlý, protože během přenosu zprávy mezi dvěma úlohami běžícími na dvou odlišných procesorech musí být z cache procesorů uvolněna pouze přenášená data.
Použitím speciálního message serveru je každá aplikace transparentně připravena využívat možnosti ochrany paměti, pokud tuto budoucí operační systém nabídne. Tento server se postará o to, aby k jistým datovým strukturám dostaly přístup pouze úlohy s příslušným oprávněním. Pokud dojde ke změně operačního systému, stačí pouze instalovat nový message server bez nutnosti dílčích zásahů do aplikace.
Současná verze PowerUp vyžaduje méně než 60 milisekund pro přenos 1000 zpráv včetně 20 - 30 bajtů uživatelských dat, 1000 odezev vyžaduje dalších 7 milisekund. Výsledkem je tedy méně než 70 mikrosekund pro zaslání zprávy včetně přenosu dat a obdržení odezvy na danou zprávu mezi dvěma thready běžícími na rozdílných CPU, zatímco tyto CPU pracují stále paralelně.

Doporučení týkající se implementace PPC softwaru pro PowerUp
Aby bylo dosaženo optimálního výkonu, doporučujeme programy modularizovat použitím subtasků (podúloh), kterým klidně můžeme říkat thready, protože náš přístup je ekvivalentní skutečnému multithreadingu. Mechanismus multithreadingu implementovaný v PowerUp softwaru je již připraven pro ochranu paměti, a jakmile tato bude implementována do OS, aplikace používající PowerUp software budou automaticky tuto vlastnost využívat.
Programátor si může pro každý thread stanovit, který procesor bude používat. Vzájemná komunikace je přitom zajištěna asynchronním message systémem. Výhodným postupem například je vytvořit hlavní task na straně 68K, který například v současné verzi PowerUp využíváme ke spouštění programu ovládajícího uživatelské rozhraní a všechna volání OS. Tento hlavní task pak vytváří thready potřebné pro nejrůznější účely. Asynchronní souborové I/O operace mohou být například implementovány jako thread na straně 68K, zatímco pro účely různých filtrů pro 24 bitovou grafiku můžeme využít PPC. V našem případě hlavní 68K thread posílá signál PPC threadu a poté může pokračovat v práci na uživatelském vstupu. PPC thread pošle zpět signál o ukončení aplikace filtrů a 68K thread pak může pokračovat ve zpracování takto obdržených výsledků, například kopírováním grafických dat do oblasti výstupu cílového okna. Samozřejmě, že námi vytvořené subthready mohou navzájem komunikovat bez intervence rodičovských threadů.
Tato implementace umožňuje jakékoliv aplikaci automaticky využívat multiprocesorová řešení. Pokud například hlavní thread přikáže subthreadu pracovat na zpracovávání obrázku po dobu 30 sekund, uživatel nemusí čekat, až zmizí busy pointer, ale může pokračovat v práci. Navíc si programátor může od systému vyžádat informaci o počtu dostupných procesorů a následně využít této informace k vytvoření více identických subthreadů, které jsou PowerUp softwarem navigovány na různé CPU a všechny vykonávají příslušnou část požadované operace. To umožňuje programátorům již dnes vytvářet software, který je připraven pro multitasking, multithreading a multiprocessing.
Toto řešení společně s vlastností multiprocessingu však sebou přináší i možnost implementace jiných hardwarových řešení, jako například 3D nebo DSP karty na bázi Zorro III sběrnice. Tato zařízení však mohou pracovat například i na lokální síti. Vše co potřebujete je definovat message port včetně jeho datové struktury. Dodavatelé takovýchto hardwarových řešení potřebují pouze znát jméno message portu, sadu funkcí a typ příslušných zpráv.

ELF formát
Pro PowerUp systém byl zvolen ELF formát jako hlavní formát spustitelných souborů. Prohlášení, že by tento formát mohl vést vývoj platformy pryč od principů Amigy, jsou falešná, což dokazuje současná implementace GNU C a SAS - C.
Pravdou však je, že použití tohoto nového formátu vyžaduje poněkud odlišné a nové způsoby vývoje. Pravdou již však není, že použitím ELF formátu jako hlavního linkovacího formátu jsou opouštěny hlavní myšlenky Amigy. ELF formát například umožňuje použití sdílených knihoven. Navíc je PowerUp software připraven rovněž pro použití tzv. Mixed Binaries. Není proto potřeba generovat Mixed Binaries, Fat Binaries (pozn.: termíny vysvětleny později v textu), ani znovu zavádět programy slinkované ve formátu ELF do paměti. Záleží pouze na vývojáři aplikace, pro které řešení se rozhodne ...
Tolik tedy k poměrně obsáhlým materiálům zveřejněným na webovské stránce Phase5. Jistě mnohé z čtenářů nyní napadne otázka, co že je na těchto materiálech vlastně podivného, ba naopak, pokud vše bude fungovat tak, jak je zde popsáno, má Amiga pro budoucnost se všemi příznačnými „multi“ vystaráno. Řekněme rovnou - měla by, protože by to nebyla Amiga, kdyby nenastaly jisté „potíže“. Koncem září minulého roku se totiž na stránce společnosti Haage & Partner objevily materiály oznamující dokončení vývoje nového kernelu pro PowerUp karty. Dejme nyní tedy slovo společnosti Haage & Partner...

Haage & Partner
WarpUp - the real speed is warp speed!
Jako vývojáři vývojového prostředí StormC jsme si vždy kladli za cíl podporovat všechny významné novinky v oblasti vývoje Amigy. Naší filozofií vždy bylo poskytnout vývojáři nástroj, který mu umožní dosáhnout nejlepších možných výsledků s čím jak nejmenším vynaloženým úsilím.
Nejdůležitější stránkou hardwaru pro vývojáře je softwarové řešení, které mu zaručí, že při dílčích změnách hardwaru nebude muset své produkty těmto řešením vždy znovu přizpůsobovat. Přesně tuto funkčnost nabízí WarpOS, který byl pro PowerUp karty vyvinut našimi autory, jimiž jsou - Sam Jordan, Michael Rock a Jochen Becher.
WarpUp je založen na principu tzv. HAL (Hardware Abstraction Layer - vrstva abstrahující hardware). HAL zajišťuje správnou činnost aplikací na různých PowerPC konceptech.
Díky WarpUp je pro Amigu poprvé k dispozici možnost provozování nativních PowerPC aplikací, ale rovněž aplikací a sdílených knihoven ve formátu mixed a fat binaries.
Vývojový systém StormC C/C++ umožňuje jednoduše zkompilovat aplikaci do nativního PowerPC módu pouhým přednastavením vlastností pro kompilátor. Velkou výhodou pro vývojáře softwaru je, že potřebné přepínání se mezi 68K AmigaOS a PowerPC funkcemi zajišťuje WarpOS kernel ve WarpUp, a tak i přímým portem aplikace dosáhneme přijatelného zvýšení výkonu. Koncepční změny v aplikacích jsou nutné, pouze když nějaká její část bude volat nesystémové funkce.
WarpUp nabízí následující výhody:
- Vysoce výkonné komunikační rozhraní mezi 68K a PowerPC procesory.
- Nativní multitasking, nativní správa paměti, semafory, lisdtag management, signály, zpracování zpráv.
- Volitelná ochrana paměti: taskům je dána možnost alokace chráněné oblasti paměti.
- Virtuální signály: ty jsou sdíleny mezi procesory a vždy přesměrovány na správný CPU.
- Meziprocesorový message systém: mezi procesory je možno zasílat zprávy.
- Optimální využití PPC MMU a PPC cache.
- Podpora MMU a zpracování výjimek pro aplikace.
- PowerSave funkce, která suspenduje PPC, pokud jej žádná aplikace nepoužívá.
- PowerPC Enforcer - chrání první stránku
- Detailní crash-requester, který optimálním způsobem napomáhá vývojáři najít chyby.
- Integrovaný debugging systém.
- Speciální podpora pro vysoce optimalizovaný software jako jsou hry a dema.
- PowerPC nativní, mixed a fat binary aplikace a sdílené knihovny.
- Použitelné rovněž pro jiné vývojové systémy jako Modula nebo E s PowerPC podporou, protože objekty nejsou vytvořeny v ELF formátu. Namísto toho je zde implementován odzkoušený Amiga hunk formát.
- Snadná instalace.
- Nezávislý na hardwaru.
- Optimální vyhlídky pro budoucnost.
- WarpUp je k dispozici zdarma
Jistě si umíte představit, jak se asi tvářila Phase5, když zjistila, že jim hrozí ztráta kontroly nad vlastním hardwarem. A skutečně - netrvalo dlouho a na stránce Phase5 se objevil článek s až příliš emotivním názvem „Warning, hackers kernel!“. Nerad bych zde Phase5 nějakým způsobem svými názory poškodil, ale musím říct, že článek byl moc i na mě, zvláště když v závěru Phase5 arogantně ujišťuje společnost Haage & Partner, že jejich software nebude zaručeně při jejich dalších hardwarových úpravách PowerUp karet funkční. Nemohou se pozbavit dojmu, že jde o čistý záměr a nějak nápadně mi to připomíná reakce Phase5 na oznámení společnosti ProDAD, jež chtěla portovat p-OS na ABOX. „Unixovské“ pokusy Phase5 ala ELF formát mi připadají jasnou snahou přetáhnout později „nenápadně“ uživatele PowerUp karet k ABOXu. Koneckonců se k tomu nakonec Wolf Dietrich (CEO Phase5) také doznává, ale buďme objektivní a přiznejme si, že každá společnost má právo si hájit své zájmy. Ale pak má také čtenář časopisu věnovaného Amize o těchto „zaječích“ úmyslech vědět - proto to zde říkám.
Dokonce jsem na několika místech na Internetu četl názory, že ELF formát je výhodný proto, že klidně můžete své programy vyvíjet na jiných Unixových platformách podporujících tento binární formát. Podle informací, které jsem nelenil o tomto formátu vyhledat, je to pravda asi tak, jak si můžete spustit na vaší Amize řekněme nějaký .exe soubor z PC, snad jen proto, že má stejnou příponu. No nemůžete. Existuje zde jistá teoretická možnost a údajně se také na některých verzích Unixu používá, ale nejsem si jist výhodami takovéhoto vývoje. Pokud náhodou nějaký opravdový programátor kroutí nevěřícně nad mými názory hlavou a říká si, : „Co to tady zase mele ...“, za prvé zrovna piji skvělý čaj značky Earl Grey a za druhé vás mohu ujistit, že na konci tohoto článku vše za mě napraví člověk na slovo vzatý, bývalý vývojář bývalé AT, nyní programátor na volné noze, pracující na OS 3.5 - Olaf Barthel.
Vraťme se však k tématu. Na rozdíl od společnosti ProDAD si u Haage & Partner nenechali všechno líbit a zveřejnili na Internetu celou historii „spolupráce“ s Phase5. Protože Phase5 tuto výzvu nijak výrazně nekomentovala a navíc se v textu vyskytuje i několik zajímavých technických detailů, budu se snažit vybrat z obsáhlého materiálu všechny zajímavé pasáže.

Ring volný - lets fight ...
Haage & Partner x Phase5
Na výstavě Computer 95 v Kolíně oznámila AT nové modely Amigy založené na procesoru PowerPC. Phase5 rovněž zde oznámila vývoj vlastních PowerPC karet. To nás přimělo k rozhodnutí, že své aktivity zaměříme z hlediska budoucnosti právě na tuto platformu.
Vývoj StormC pro PowerPC začal někdy v březnu 1996, ihned po CeBitu. Nastínili jsme si hlavní koncepty vývoje, abychom se ujistili, že se příliš nevzdalujeme hlavním rysům AmigaOS. Z tohoto důvodu jsme nikdy ani nepřemýšleli o možném použití jiného binárního formátu, navíc bez oficiálního rozhodnutí vlastníka práv AmigaOS. Nakonec se Amiga dostala opět do finančních potíží a situaci se nezdál vyřešit ani na scénu vstupující VisCorp. My jsme však pokračovali v práci, protože naše řešení nijak nenabourávalo koncept existujícího OS.
Když Phase5 oznámila, že se rozhodli pro duální procesorové karty, stalo se nutností, aby naše softwarové řešení podporovalo tzv. Mixed Binaries. Takovýto typ programu obsahuje 68K i PPC kód v jednom a tomtéž programu. Z hlediska programátora je zcela lhostejné, která část programuje obsažena v kterém kódu. Přístup k datům (např. globálním proměnným) je umožněn oběma procesorům a přepínání mezi procesory se děje plně automaticky, bez nutnosti dalšího programování. Vše co musí vývojář udělat, je se rozhodnout, která část programu poběží na PPC a která zůstane na straně 68K. Zde skutečně nezáleží na tom, zdali se jisté části kódu těsně překrývají. Používáme například společné proměnné a datové struktury, návratové skoky z jedné části do druhé se dějí skrze tzv. ukazatele funkcí, atd.
K našemu velkému překvapení se Phase5 rozhodla pro podporu formátu ELF, který činí generování potřebných Mixed binárních souborů, doporučovaných dokonce vlastní Phase5, skutečným problémem:
- PPC část programu musí být nahrána manuálně.
- Neumožňuje procesorům sdílet globální proměnné.
- Datové struktury jsou současnými 68K kompilátory interpretovány jinak než použitím GNU C pro PPC, takže nemohou být sdíleny mezi procesory.
- Návratové skoky skrze ukazatele funkcí a dokonce „běžné“ přepínání mezi procesory musí být programováno manuálně.
Po téměř 18 měsících vývoje nabízí WarpOS a StormC optimální způsob jak vytvářet Mixed Binaries. Vývojář si jednoduše zvolí, který z programových modulů by měl být zkompilován pro který procesor, v nejhorším případě ještě může daný modul přerozdělit na samostatné moduly a pak již jen stačí program zkompilovat a máme na světě PowerPC aplikaci. StormC a Storm Link se postarají o zbytek. Díky sdílenému přístupu ke globálním proměnným a kompatibilní interpretaci datových struktur nemusí být při této operaci změněn jediný řádek kódu. Kontextové přepínání mezi procesory se děje zcela automaticky, programátor ani nemusí vědět, kdy k těmto přepínáním dochází.
V polovině října 96 jsme konečně od Phase5 obdrželi dvě vývojářské verze PowerUp karet, s jen strohým programovým vybavením. Nicméně již tehdy bylo jasné, že jsou naše řešení principiálně odlišná a že se tedy musíme vydat vlastní cestou. Tehdy ještě Phase5 nijak naše řešení nekomentovala.
První výsledky své práce jsme předvedli na výstavě Computer 96. Byly založené na standardním Amiga hunk formátu a fungovaly bezchybně. V praxi se však ukázalo, že výkon nebyl tak velký, jak jsme původně očekávali. Pro každé volání funkce systému je nezbytné provést kontextové přepnutí na stranu 68K procesoru, vykonat tuto funkci a přepnout se zpět na PPC procesor pomocí dalšího kontextového přepnutí. Po každém takovémto přepnutí je samozřejmě nutné vyčistit cache, což samozřejmě zabere nějaký čas. Podle našeho mínění bylo možné toto kontextové přepínání urychlit hardwarovou úpravou, vlastně nás překvapilo, že to Phase5 neudělala (pozn.: pozor, nemusí již platit, jedná se o rok 96). Požádali jsme tehdy Phase5 o dodatečné informace o hardwaru, ale byli jsme odmítnutí s tím, že se ještě může hardware kdykoliv dodatečně změnit, a tak by naše softwarové řešení stejně nefungovalo. Pro nás, jako softwarové vývojáře to byla velmi znepokojující odpověď, která jasně dávala najevo, že Phase5 si chce udržet své monopolní postavení také na straně softwaru pro PowerUp, držet tím konkurenci stranou, a tak se ani nedivíme výpadům Phase5 vůči WarpUp.
Byl prosinec 96 a náš vývojový tým přišel s řešením, které drasticky urychlilo kontextové přepínání oproti vlastnímu řešení Phase5. Bylo to 0.5 milisekund oproti 60-90 milisekundám softwaru Phase5 (pozn.: již neplatí).
Na „Magických Dnech“ v Trieru v dubnu 97 jsme předvedli naše první dema a měli několik přednášek na téma programování pro PowerUp. Na této show jsme rovněž hovořili s Wolfem Dietrichem a Geraldem Cardou z Phase5 a vyzvali je k veřejné diskusi o možném objektovém formátu a koncepci rozhraní pro PowerUp. Tato myšlenka však byla odmítnuta se slovy: „My jsme se to rozhodli udělat tímto způsobem a tak to taky bude. Nebudeme o tom diskutovat!“
Těsně po výstavě jsme asi po více než třech měsících obdrželi novější verzi PPC.library. Jak se dalo očekávat, náš software nefungoval. Změny v koncepci byly tak zásadní, že dokonce co se zdálo být pro Phase5 před několika měsíci zcela legálním přístupem, již bylo nyní nepoužitelné.
Abychom zabránili dalším nekompatibilitám se softwarem Phase5, sepsali jsme seznam požadavků, které by zajistily přístup k PPC.library Amize vlastním způsobem a společně s Phase5 tak definovali standardní rozhraní pro PPC.library. Tento seznam byl prodiskutován s Geraldem Cardou, ale zůstalo pouze u slov. Když jsme Phase5 předvedli své vlastní řešení, byli překvapeni, jak se našim programátorům povedlo nastřádat potřebné znalosti o PPC.
Asi po čtyřech týdnech jsme obdrželi novou verzi PPC.library, která obsahovala řadu vlastností, které jsme předvedli Phase5 ve vlastním řešení. Samozřejmě i tato knihovna byla opět s naším řešením nekompatibilní, což nás už však v případě Phase5 více nepřekvapuje. Díky neustálé ignoraci ze strany Phase5 jsme neměli jinou možnost než vytvořit vlastní PPC.library. Tato knihovna byla dokončena 5. června 97. To však neznamená, že bychom nebyli nadále ochotni s Phase5 spolupracovat. Až do tohoto data jsme se pořád snažili být kompatibilní s řešením Phase5, tak, aby to bylo pro ně přijatelné. Do tohoto data jsme rovněž obdrželi další dvě nové verze PPC.library, každá z nich však opakovaně s naším softwarem odmítala pracovat. A tak jsme znovu a znovu museli upravovat svůj software a obejít tak chyby v programování Phase5.
Nemůžeme se zde nezmínit o změnách, které Phase5 v této knihovně udělala koncem července. Jak všichni víme, PowerUp karty měly být k dispozic již koncem června. Termín uvedení karet na trh se však neustále opožďoval. Koncem července Phase5 vydala další verzi knihovny, kdy bylo nutné překompilovat všechen software vytvořený v ELF formátu. Toto jsme opravdu nepochopili, protože karty měly být na trhu již před měsícem. Mimochodem změny, ke kterým zde došlo, nijak neovlivnily software vytvořený ve StormC. Museli jsme pouze překompilovat velmi malou část naší kompatibilní knihovny.
Poslední verzi PPC.library jsme obdrželi přímo s oficiální PowerUp kartou. Dodávka rovněž zahrnovala první dokumentaci „revolučního“ message systému, hotového tak sotva z poloviny.
Vývojáři, kteří se rozhodnou vyvíjet pro PowerUp karty za pomocí softwaru Phase5 by si měli být vědomi skutečnosti, že jimi vytvořený software s velkou pravděpodobností nepoběží na PowerPC hardwarových řešeních jiných firem. Prohlášení Phase5 o hackerském kernelu nanejvýš ukazují jejich strach z potencionální konkurence.
Jako paralelu, co se přihodilo, Vám můžeme uvést příklad společnosti ProDAD, kterou Phase5 odmítla podporovat zhruba před rokem. Phase5 Vám může namítat, že rovněž ProDAD obdržel vývojářskou verzi PowerUP. Co vám již však Phase5 nepřizná je fakt, že nikdy žádné společnosti neposkytla hardwarové specifikace, jaksi nutné k tomu, abyste nad daným hardwarovým řešením mohli vyvíjet operační systém.

Možná řešení
Z hlediska uživatele nemají tyto diskuse větší význam. Ale my jako softwarová společnost nemáme ani dostatek času ani prostředků vytvářet nová softwarová řešení pro každou nově příchozí Amiga platformu. Z tohoto důvodu by bylo dobré ustanovit nezávislé konsorcium, které by stanovilo nezbytné standardy. Pokud by se toto konsorcium rozhodlo pro ELF formát, mohli bychom se přizpůsobit tomuto řešení. Máme ale obavu, že Phase5 si zvolila ELF formát jen proto, aby si připravila uživatelskou základnu pro ABOX. Mluvit přitom o průmyslových standardech a seznamu vývojových systémů, které by mohly být použity na jiných a nákladnějších platformách nepovažujeme za věcné. Podle našeho názoru by vývoj softwaru pro Amigu měl probíhat na Amize.
Prohlášení Phase5, že jsme vytvořili WarpUp jen proto, aby vývojáři upřednostňovali StormC jsou falešná! Každý vývojář kompilátoru má možnost tento přepsat pro PowerPC. Takovýto kompilátor může klidně pracovat dále s Amiga hunk formátem, tak jak tomu bylo doposud. A protože PowerPC.library (pozn.: náhrada PPC.library Phase5) je 100% kompatibilní sdílenou knihovnou Amigy, může ji používat každý. Je dokonce možné použít rozdílné kompilátory pro stranu 68K a PPC procesoru a vytvořit tak jeden binární soubor typu Mixed Binary. Rádi pomůžeme kterékoliv společnosti portovat jejich kompilátor pro PowerPC procesor.
Tolik tedy vyčerpávající informace od společnosti Haage & Partner. Nějak se nám to zamotává, viďte? Ujišťuji vás, že to zdaleka není všechno.

Phase5 x Microcode Solutions
Microcode Solutions zřejmě všichni dobře znáte díky emulátorům Pcx a Fusion. A tak je také jasné, že pokud chtějí pánové přenést svůj software na platformu PowerPC, musí se dostat do kontaktu s PowerUP a tedy i s vlastní Phase5. Nešťastné to setkání.
Nebyl jsem přítomen v diskusní skupině Picasso96, kde údajně vše začalo, vím jen zhruba, že se Ralph Schmidth z Phase5 ohradil proti výpadům Jima Drew vůči této společnosti. Vše začalo údajně tak, že Jim Drew požádal Phase5 o bezplatné zaslání vývojářské karty, protože prý má v rukávu něco převratného. Ve skutečnosti se jednalo o odstranění chyby přerušení, kterou však později Phase5 ve svém softwaru odstranila také. Drew si stěžoval na typické nedostatky Phase5, jako je neschopnost odpovídat na dotazy, natož možnost komunikace, a to přestože má Microcode Solutions registraci na úrovni Copper. Vše se vyhrotilo tak, že Drew požádal svého kolegu Joye Fentona, aby to s Ralphem Schmidthem vyřídil, protože se už s ním více nemíní bavit.
Nejprve následuje výměna kousků zdrojových kódů, aby si pánové navzájem dokázali, kdo z nich je více v obraze, načež to přestane bavit i Fentona a ten vydává závěrečné stanovisko (pozn.: opět pozor, říjen 97):
OK, nyní se podívejme na „vývojový systém“ Phase5!
PowerUp karta nám byla dodána s jedním 800K floppy diskem a „lite“ verzí GNU, která by měla produkovat PPC ELF soubory. Tohle je tedy něco. Stroze napsaná dokumentace doporučuje, že k tomu, abyste dostali funkční kompilátor, musíte si stáhnout celou sadu ADE GNU někde z webu.
Tento balík prostě nechápe nic o Amize - žádné struktury, prostě nic! Jakýkoliv PPC kód musí být kompletně neutrální a jakýkoliv pro Amigu specifický kód musí být odstraněn nebo překódován. Lehce se dalo zjistit, že všechny přibalené rutiny jsou použitelné pro kterýkoliv jiný systém. Nenajdete zde žádnou aplikaci „kompletně“ napsanou pro PPC s použitím softwaru Phase5, prostě protože je to příliš mnoho práce. Všechno co uvidíte jsou plug-in moduly pro 68K programy.
GNU v žádném případě není profesionální vývojový systém! Ten kdo tvrdí opak, by si měl vyzkoušet CodeWarrior a pak zkusit pracovat s GNU. Ale asi čekám od někoho jako je Phase5 příliš.
A když tady konečně máme Amigácký vývojový systém a ne nějaké kusy posbíraného freewarového smetí, všechno co umí Phase5 udělat je, že Vás ujistí, že jejich příští řešení učiní to Vaše nekompatibilní.
Já nestojím o to, dát svoji vyzkoušenou a skutečnou Amigu všanc nějakému unix-wanna-be boxu.
Jako perličku na závěr si Fenton připravil petici, která měla být zaslána Phase5, aby natrvalo vyklidili pole působnosti v oblasti softwaru. Nemáte pocit, že se nějak přestáváte v dané situaci orientovat? Nebo jste snad nyní nakloněni více na stranu WarpUp? Nejásejte, ještě tady pro vás mám jedno „malé“ povídání od Olafa Barthelse, kterého jsem se zeptal:
Který z formátů je pro AmigaOS vhodnější, ELF - používající sdílené knihovny, nebo klasický Amigahunk formát?
Zdokonalený AmigaOS hunk formát má výhodu toho, že můžete vytvořit tzv. fat binaries, to znamená, že kód který se nativně provádí na PowerPC a taktéž kód, který se provádí na 68K procesoru, může být pohromadě v jednom souboru. Vývojáři softwaru pak mohou distribuovat jednu aplikaci, namísto aplikací dvou. Avšak, takovéto „tlusté“ binární soubory jsou přesně to, o čem vypovídá už jejich název - rozsáhlé. Bude trvat delší dobu je zkopírovat a zavést do paměti. Na Macu, který má rovněž možnost používat tento typ binárních souborů, vyvinuli dokonce vývojáři speciální nástroje, které umí ze souboru odstranit nepotřebné části kódu, aby tak ušetřili místo a urychlili proces nahrávání. Osobně mám jisté pochybnosti o tom, zdali jsou fat binaries, skutečně dobrou myšlenkou. Pokud se podíváme do historie, programy pro Amigu, jako je třeba „Imagine“, se vždy dodávaly spíše ve dvou verzích (jedna čistě 68K, další pro 020 + FPU), než verzi jedné. V dnešní době, kdy jsou hlavním distribučním médiem CD-ROM disky, není větším problémem dodávat dvě samostatné aplikace a za pomocí instalačního skriptu se rozhodnout, která z nich bude kopírována na náš systém, spíše než jednu monolitickou aplikaci.
ELF je průmyslovým standardem na několika platformách. Tak například, Amiga Unix (SV4R) by mohl používat ELF jako svůj nativní binární formát. Pokud se vrátím zpět do doby AT, Motorola se snažila prosazovat vlastní xcoff binární formát, protože téměř každý vývojový systém této společnosti tento formát podporoval (další průmyslový standard; legrační kolik že jich to vlastně je). Takže když se na to podíváte blíže, vývojový systém je to, co ovlivňuje volbu binárního formátu. Pro Motorolu to byl xcoff formát, protože jejich kompilátory produkovaly xcoff soubory, pro Phase5 to byl ELF, protože kompilátory a nástroje, které si zvolili, produkovaly ELF soubory, no a pro Haage & Partner to byl zdokonalený hunk formát, protože mohli jednoduše upravit svůj kompilátor a linker tak, aby produkoval tento typ souborů. Nepochybuji o tom, že zde byl jistý záměr zvolit ten či onen binární formát, ale podmínky v praxi mohou diktovat hodně. Pokud bych byl ve stejné situaci jako Phase5, zvolil bych ELF - technologie je stabilní a používá se několik let a je zde dostupný kvalitní volně dostupný kompilátor, který tento typ souborů podporuje - GNU C. Phase5 se jednoduše nemohla rozhodnout provést nějaké změny v kompilátoru, protože žádný nevlastní, ale Haage & Partner ano.
Rovněž k tomu, abyste provedli nějaké změny do existujícího AmigaDOS hunk formátu a abyste jej mohli posvětit jako standard, potřebovali byste svolení vlastníka OS, který v současné době k není natolik kompetentní, aby rozhodl tak závažnou záležitost. Když toto všechno zvážíme, byl ELF volbou, která představovala to nejmenší riziko a pro softwarové inženýry je často tento pohled zásadní.
Který z těchto formátů je tedy lepší? To záleží také na tom, jaký problém se snažíte s tímto formátem vyřešit. Z mého pohledu slouží Amiga hunk formát pouze jako logické rozšíření existující technologie Amigy a jeho jedinou výhodou je, že umožňuje použití fat binárních souborů. A to není mnoho. ELF nabourává existující filozofii AmigaOS asi ve stejné míře, jak to činí přechod na nový procesor. Nevyžaduje žádné změny nebo rozšiřování existujících datových struktur, a tak snižuje nebo odstraňuje nutnost kontroly správnosti takovýchto změn. Je definitivně tím nejmenším a nejméně nákladným riskem. Já bych zvolil ELF.
Trochu pitomá otázka od ne-Amiga programátora: Co je špatného na sdílených knihovnách? Jaký je zde tedy rozdíl v použití oproti modelu AmigaOS?
Když používáte kompilovaný jazyk, binární soubory, které produkuje kompilátor musí být zkombinovány do výsledného proveditelného kódu za pomocí nástroje, kterému se říká linker. Statické linkery kombinují všechny objektové soubory a knihovny v době finálního vytváření aplikace. U sdílených knihoven, jaké se používají třeba v Unixu, je tento proces poněkud odlišný. Tam se program slinkuje se sdílenými knihovnami, až je po jeho spuštění. Zřejmou výhodou je, že můžete například nahradit knihovny, i když už je program vytvořen. Tyto sdílené knihovny umožňují několika aplikacím sdílet programové sekce kódu knihovny, zatímco každý program obdrží vlastní lokální kopii datové sekce knihovny. Takže tyto sdílené knihovny nemusí být reentrantní a program a knihovna se stávají jedním celkem.
U sdílených knihoven na Amize, tak jak je vytváří a spravuje exec.library, je tomu jinak. Programová sekce kódu knihovny zde musí být reentrantní. Data knihovny musí být read-only, nebo modifikována pouze uvnitř kritických regionů. Programy, které používají tyto knihovny, je musí volat skrze tabulku skoků dané knihovny a není zde žádný dodatečný linkovací proces, který by nějakým způsobem umožnil dynamicky kombinovat vlastní program a knihovny funkcí, když už je jednou aplikace zavedena do paměti.
Tím křehkým místem sdílených knihoven na Amize je právě ona tabulka skoků. Velikost každého zápisu v takovéto tabulce je dána architekturou procesoru, například velikostí instrukce skoku / nepodmíněného větvení. Na 68K procesoru, zabírá takováto instrukce skoku šest bajtů a umožňuje adresaci kdekoliv uvnitř 32 bitového adresového prostoru. U PowerPC je však situace odlišná; každá instrukce zde zabírá přesně čtyři bajty a neexistuje zde žádná instrukce pro skok na specifickou adresu uvnitř 32/64 bitového adresního prostoru. Je zde pouze instrukce pro nepodmíněné větvení (srovnatelná s BRA.W na 68K procesorech), která umožňuje, aby provádění kódu pokračovalo na místě relativním vzhledem k adrese dané instrukce. A přirozeně, toto je omezující faktor pro velikost tabulky skoků, ale také pro velikost vlastní knihovny. Avšak na druhé straně, mohou být obě tato řešení překonána rozumným návrhem rozhraní knihoven.
Osobně ve skutečnosti nevidím nic závadného na Amigáckých sdílených knihovnách. Existují zde pouze jistá omezení z pohledu architektury procesoru, ale tomu se dá předejít. Tento problém může být vyřešen, když pro to vyvstane konkrétní potřeba. Avšak pokud jste v pozici jako Phase5, dává větší smysl použít existující a ověřenou technologii, než investovat čas, úsilí a peníze do přizpůsobování se jiné technologii, která vám zcela nesedí.
Wolf Dietrich se zmínil o dvou dalších společnostech, pracujících na PowerPC řešeních, spolupracujících s Phase5. Společnosti „spolupracující“ s Phase5? Tomu se dá těžko uvěřit...
Tak, a doufám, že jste tam, kde jsem vás chtěl dostat, totiž ve stádiu, kdy každý z vás bude muset být soudcem i porotou sám za sebe. Pro další informace o ELF formátu si můžete odskočit na www.seznam.cz, do sekce software/operační systémy/ a oddílu „školičky“, dle mého názoru nejlepšího českého zdroje solidních informací o mnoha jazycích a formátech, se zaměřením hlavně na Unix. Možná to ale také vůbec nebude zapotřebí. Na podnět několika vývojářů nyní zahájila pod křídly ICOA činnost další z pracovních skupin, věnujících se možnosti implementace různých binárních souborů do AmigaOS. Padly zde zmínky o jistém SDE formátu, tzv. Slim binaries. Nevím sice dodnes o tomto formátu nic konkrétního, snad jen kromě několika názorů, že pokud by se to povedlo, měla by Amiga z hlediska technologií zase jistý náskok. Uvidíme. Pro který formát bych se rozhodl já? To je jednoduché - použil bych formát ALF a odletěl na Melmeck. Mají tam „rádi“ „kočky“ a nejí se tam špenát...
Long live the Amiga!

PS: děkuji za pomoc při diskusích o této ale i jiných záležitostech následujícím kolegům z IRC: Ivo Janáček, uF0, Shaman, NFW, Lopolo, DNA, Exie, Fatal, Sampl, Andrew, Alien, JayTee, Yan, Atlet, Moth. Zapomněl jsem na někoho, boyzzz?



Pozn.: články boli naskenované ako text a preto obsahujú aj zopár chýb. Taktiež neručíme za zdrojové kódy (Asm, C, Arexx, AmigaGuide, Html) a odkazy na web. Dúfame, že napriek tomu vám táto databáza dobre poslúži.

Žiadna časť nesmie byť reprodukovaná alebo inak šírená bez písomného povolenia vydavatela © ATLANTIDA Publishing