Az opensource elfeledett hősei: Miyasaka Masaru – mélyvíz
De mit is alkotott ő? A neve nem hiszem, hogy bárkinek is ismerősen csengene.
Noha az elmúlt évek alatt mindenkinek megtakarított már százforintokban mérhető villanyszámlát vagy feltöltésenként plusz fél-egy órányi akksi kapacitást a mobil eszközében, vagy csak simán hosszú (másod)percekkel rövídett le hosszúnak tűnő várakozási időket.
Mindezek ellenére sosem lett opensource celeb, mivel ő nem egy önállóan működő programot készített, hanem “csak” egy library-t. Ez elég hálátlan dolog, mivel ezeket csak egy igen szűk szubkultúra ismeri, és aztán include-olja be a kódjába, ahol ugyan a changelog-ban megkapja a neki járó tiszteletet, de az about ablakba ritkán fér bele a neve…
Nos, aki még nem találta ki, hogy mi volt élete fő műve az opensource community-ben, az olvassa el a kettőspont mögötti szót: libjpeg-turbo.
Egyáltalán mi az a libjpeg-turbo? A lib az megvan, mert library. A jpeg is megvan a modemes pornós korszakból. A turbo meg valami olyasmi, hogy gyorsabb. Optizta egy picit a jpeg-et, és ennyi? Hát nem! Assembly-ben újraírta az egész libjpeg6b-t, és 2-5-ször gyorsabb compress/decompress algokat alkotott. Leírom úgy is, hogy 500%-kal gyorsabb, avagy ötödannyi akksit eszik, úgy látványosabb. “Mindössze” 7 évébe került ez a mutatvány, amit 1999 és 2006 között vitt véghez. Már ’97-ben is zavarta, hogy lassan pörögnek a képnézőben a jpeg-ek (tuti pornó, merthát japán! :-> ), és az akkor kijött MMX technológiát kezdte nézegetni. A projectet hivatalosan ’99-ben indította, és egymaga megcsinálta az x86-os és az x86-64bites asm kódokat is. Akit a színes benchmark grafikonok mozgatnak, az katt ide:
http://www.briancbecker.com/blog/2010/analysis-of-jpeg-decoding-speeds/
Nagyon valószínű, hogy ennek a 2010-es blogposztnak hatására kezdtek homlokukra csapni a developerek, hogy “Jéééé!!!! Nézzétek már!” . Először a virtualgl-es srácok cuppantak rá, és kezdték el kipofozni a 2006 óta szunnyadó kódótt, aztán jöttek a furcsa meglepődések a Firefox háza táján 2010. júniusában:
https://bugzilla.mozilla.org/show_bug.cgi?id=573948
ezután néhány nappal később a – Firefox levlistát olvasgató – Chrom(e|ium)-osok is észbe kaptak:
https://code.google.com/p/chromium/issues/detail?id=48789
Ezek után nem volt kérdés: a Firefox 5.0 már a libjpeg-turbo-val jött ki
http://website-archive.mozilla.org/www.mozilla.org/firefox_releasenotes/en-US/firefox/5.0/releasenotes/buglist.html
a Chrome pedig a 11-es verziótól tette ezt default-tá:
http://src.chromium.org/viewvc/chrome?revision=74148&view=revision
Ahhoz képest, hogy ez mekkora speed improvement-nek számított, nem igazán promózták a changelog-ban ennek jelentőségét.
Egészen prózai ok áll amögött, hogy 2010-ig a világ nem is hallott efféle projectről, és nem is képzelte senki, hogy valaki az igen összetett Huffman algot majd le fogja asm-ezni unalmas perceiben: Miyasaka csak japán nyelven írta a dokumentációt és a kommenteket a forrásban. Másik oldalról is fura, hogy az igen nagy techcégek fejében elviekben sem fordult meg, hogy asm-re portolják a jpeg library-ket, pedig a Canon-nál, Nikonnál például esszenciális dolog, hogy milyen gyorsan fotózunk, és meddig bírja az akksi. Talán az lehet, hogy túl nagy falatnak találták a huffman asm-esítését, és belekezdeni is reménytelennek látták. Miyasaka eközben meg 7 év munkával már elért egy működőképes szintre, és 2006-ban már patch-et adott ki a Firefox-hoz:
http://cetus.sakura.ne.jp/softlab/jpeg-x86simd/sources/firefox-patch-x86simd-1.02-2.zip
Mekkora menő lehetett már az arc, hogy az ő Firefox-a az akkori javascriptless-but-jpegheavy oldalakon min. 3-szorosan alázta bármelyik konkurens böngészőt!!! Én is lehettem volna menő, ha akkoriban hallok a projectről, dehát nem voltam menő akkor se… :-< Tuti jól lehetett csajozni egy 2-5-ször gyorsabb brózerrel, ahogy ma is sok mosolygást lehetne kicsalni a bölcsészlányok arcára, ha egy 5-ször gyorsabb facebook-ozó/youtube-ozó alkalmazást kapnának a leértékelt laptopjukra.
Noha Miyasaka saját maga még 2009-ben fedorához gyártott saját libjpeg csomagokat, ott sem fedezték fel a gyöngyöt a disznók. :-> A -sohamegnemtörtént- sikerhez ugyan a virtualgl-es srácok csapata rázta gatyába a kódját, mégis minden .asm file elejére beleírták Miyasaka Masaru nevét – maximális riszpekt!
Azóta már az arm architektúrára is átportolták, hogy az android/ios/wphone/maemo user-ek is örülhessenek. Bár ezt inkább mondanám rewrite from scratch-nek, azaz újraírták a nullából, mert az arm és az x86 alapvetően eltérő platform eltérő utasításokkal. A lényeg, hogy az ötlet – miszerint asm-ben dekódoljunk a jpeg-et – ment tovább. A jelenlegi aktív project mai hivatalos oldala pedig: https://www.libjpeg-turbo.org/ . Így a legvégére iderakom az original jpegsimd weboldalt, amit évekig magasról szart le a világ japánul joggal nem tudó része:
http://cetus.sakura.ne.jp/softlab/jpeg-x86simd/jpegsimd.html
Szóval amikor anyázol, hogy egy 32 megapixeles jpeget miért tart 6 másodpercbe megjeleníteni, akkor gondolj arra, hogy
Miyasaka Masaru nélkül ez bizony fél percedbe kerülne!