lbzip2-2.0

A 0.23 kiadása óta eltelt másfél évben nem nyúltam a projekthez. Időnként esetleg gondolkoztam róla, kicsit talán tervezgettem. Főleg azonban levelztem, elemezgettem másokkal. Mikołaj Izdebski az új fejlesztő és maintainer, a 2.x sorozat tokkal-vonóval az övé.

Óriási munkát végzett, melynek gyümölcse igen jelentős előrelépés; mindenkinek ajánlom. Csomagolva egyelőre Gentoo-ban láttam. A Debian csomag (szponzorált) maintainer-e egyelőre én vagyok, de itt is változások várhatók.

A 0.23 továbbra is letölthető marad az eddigi címekről; hozzányúlni csak kritikus biztonsági hiba esetén fogok.

Enjoy!

Hozzászólások

Jól hangzik. De jó lenne, ha

a) gabor@freebsd betolná a portsba mihamarabb
b) -"- az oprendszerbe mihamarabb (jelenleg bzip2 v1.0.5, 10-Dec-2007. van benne). Mondjuk ahhoz a GPLv3 sajnos nem OK, valami bsd-sek számára elfogadhatóbb (dual-)licenc kellene.

Hm, az (a)-hoz elég volna megpingelni Beanie-t, de ezzel adtál egy jobb ötletet. Inkább a disztrók által automatikusan vizsgált cím alá beraktam egy kamu 2.0-ás csomagot az új elérhetőségekkel.

A (b) nagyon valószínűtlen. A saját kódomat biztosan nem fogom GPLv2-nél engedékenyebb alatt kiadni. Idővel persze az utolsó sorom is "kikophat" a kódból, ugyanakkor Mikołaj szerintem még szigorúbban gondolkozik. Az én GPLv2+ kikötésemet pl. felhúzta GPLv3+-ra.

(Nem vagyunk elvakultak; egyszerűen így gondoljuk és kész.)

A bzip2-1.0.5-öt egyébként sürgősen frissíteni kellene 1.0.6-ra, mert az előbbiben van egy csúnya luk (CVE-2010-0405). Lehet persze, hogy a javítást már backport-olták; nem néztem.

Hát ha nem is frissítettek 1.0.6-ra, de a backport úgy nézem megvolt.

http://security.freebsd.org/advisories/FreeBSD-SA-10:08.bzip2.asc

Ami a licencelést illeti, én Dual-licencre gondoltam, de ha nem, hát nem. Anno Kirk McKusick-nak volt valami trükkös licence a soft-update-re, aminek lényege az volt, hogy *BSD-nek BSD licenc, másnak keményen fizetni kell(ett volna) ha használni akarja. De van pár progi, ami úgy dual-licence, hogy amúgy GPL-valami, de betehették *BSD-sek valami kevésbé BSDL ellenes licence segítségével. Nyilván ha marad GPLv3, akkor - mondjuk - FreeBSD-be az alaprendszerbe nem kerül be az életben sem, hanem marad ports-ban/package-ként elérhető. (GPLv2-s licencű dolog még csak-csak akad az alaprendszerben - bár igyekeznek kigyomlálni hosszú távon azokat is.) Más BSD-k ehhez másként állnak, ugye DragonFlyBSD szó nélkül lépett 4.2.1-es gcc utánra.

Aztán persze lehet, hogy az egész felvetésemnek semmi értelme nem volt, mert rajtam kívül a kutyának eszébe nem jut, hogy ez szempont legyen - végül is ha jól tudom, a bináris csomagoknál használt alapértelmezett tömörítő gzip - bzip2 - xz/lzma váltása miatt lehet annyira nem lényeges, hogy a(z épp leváltott szoftver) többszálúságával foglalkozzanak. Nyilván az lenne a legfontosabb, hogy az épp aktuálisan használt tömörítő teljesítsen legjobban. És mivel gzip-ből se a többszállú pigs (vagy ha van bármi egyéb) került be, lehet itt sem érdekes a dolog másnak. (Ha már, akkor minimalista szinten megnéztem, hogy ennek az xz-nek van-e MT-verziója, azt látom, hogy a p7zip tud ilyet, illetve hogy van egy https://github.com/vasi/pixz eszköz amiről azt írják, hogy többszálú. Tudsz más ilyenekről? Bocs, ha már írtad esetleg.)

Én ezeket ismerem legalább hallomásból:

  • tamp, QuickLZ alapokon
  • gzip: pigz
  • bzip2: pbzip2, bzip2smp, smpbzip2, dbzip2, p7zip, lbzip2
  • lzip (LZMA implementáció): plzip
  • xz (LZMA implementáció): p7zip, xz (a legújabb xz már tud több szálon futni, azt hiszem), pxz, lxz

A pbzip2-et ma is fejlesztik, ráadásul két ágon (1.x és 2.x), bár azt hiszem, a 2.x-et még egyáltalán nem adták ki. A bzip2smp és smpbzip2 egyikét sem tartják már karban tudtommal. A dbzip2 a Wikimedia alapítvány cluster-es bzip2 implementációja, amellyel pl. a Wikipedia dump-ot tömörítik. A p7zip-nek van egy független, task parallel (asszem max. 4 szálig gyorsuló) bzip2 modulja.

A pixz-ről eddig nem hallottam, de most megnéztem a linket. Annyit tanácsolnék a szerzőnek, hogy a szöveges állományait 80 karakter szélesre tördelje.

Az lxz nem rossz szerintem (én írtam :)), de iszonyatosan sok memóriát zabál. A pxz temp file-okkal dolgozik és OpenMP-s. Leveleztem egy ideig a szerzőjével, és végső soron meggyőzött, hogy teljesen jogos, amit csinál; a buffer cache meglepően sokat segít a programnak, úgyhogy jó a teljesítménye, nem kell végig a diszkre várni. Arra meg, hogy sok diszket eszik, azt lehet mondani, hogy egyébként meg rengeteg virtuális memóriát zabálna (ahogy az lxz is).

Azt hiszem, hogy a "legjobb" (nem (csak) data parallel, hanem task parallel) LZMA tömörítő most GNU/Linux-ra a p7zip (7za), ennek viszont katasztrofális a parancssora; valahogy egyáltalán nem illik a UNIX(R) környezetbe. Én egy wrapper shell script-tel használom, ami lényegében így hívja meg tömörítéshez (filterként):

7za a /dev/null -bd -txz -mmt=on -si -so -mx=9 -ms=on -mf=off

és így kitömörítéshez:

7za e           -bd -txz -mmt=on -si -so

Windows-on egyébként van a WinRAR, ami egy iszonyatosan jó program. Rendkívül sokoldalú, 4 szálig minimum tud skálázódni (láttam), és több szálon is nagyon jó tömörítési rátája van. A RAR formátum kifejezetten hajlékony (solid archive, indexed archive, recovery record, titkosítás stb). Látszik, hogy orosz családi vállalkozásban készül már cirka 20 éve.

Azt hiszem az elérhető SSD technológia nagy I/O sávszélessége miatt most még inkább kívánatos és hatékonyabb lesz a párhuzamos tömörítés.

Talán nem lenne rossz, ha az felé tendálna néhány fejlesztési törekvés az oprendszerek terén, ha alap komponenseket párhuzamosítanának, vagy lecserélnének párhuzamos verziókra. Habár van olyan vélemény is, hogy kevésbé megbízhatóak a többszálú megoldások, ezt nem tudom, illetve hinném hogy csak implementáció kérdése. Azért sok core komponens használ be és kitömörítést állandóan. Gondolom sokat dobhatna a rendszer sebességén is, nem csak a specifikus task-okon.

Talán nem lenne rossz, ha az felé tendálna néhány fejlesztési törekvés az oprendszerek terén, ha alap komponenseket párhuzamosítanának, vagy lecserélnének párhuzamos verziókra.

Ilyen törekvés létezik; valahol mintha csiripelték volna a madarak, hogy a coreutils ebbe az irányba megy. Hm hm...

http://lists.gnu.org/archive/html/bug-coreutils/2009-10/msg00179.html
http://lists.gnu.org/archive/html/bug-coreutils/2010-03/msg00037.html

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=518696#74

https://github.com/hpc/Parallel-coreutils

Egyébként az Apple-nek van ugye a Grand Central Dispatch-e; viszonylag egyszerű párhuzamosításra pedig a gcc-ben ott van az OpenMP támogatás.