What? - fájltípus azonosító
Amikor a klasszikus fájlrendszerben böngészünk - leginkább DOS vagy Windows operációs rendszereken -, a fájlok típusának azonosításában a kiterjesztés szokott segíteni. JPG - kép, MP3 - zene, DOCX - Word dokumentum, ZIP - tömörített fájl.
Ezeknek a fájloknak a tartalmát a neki rendelt program tudja megnyitni, kezelni, lejátszani, esetleg szerkeszteni. De mi történik akkor, ha a fájlnak nincs kiterjesztése, vagy teljesen általános, például DAT vagy valami eddig ismeretlen, ami közvetlenül nem utal sem a típusára sem a programra, amivel kezelhetnénk. Említhetném például az esetet, amikor kiderült, hogy 16 demo játék áráért 400-at is kaphatok.
Utóbbi csak azért volt lehetséges, mert a szemem már ráállt az általam gyakran használt fájlok azonosítására. De minden véges, ráadásul egyesével végignézni sok fájlt elég időigényes, ha pont keresek valamit: például fájlrendszerhiba esetén a Windows CHK kiterjesztésű fájlokat hoz létre a sérült részekből, amik tartalma bármi lehet, ami éppen sérült volt. Ha szeretném visszaállítani ezekből a képeket, meglehetősen nehéz dolgom lenne.
Erre szolgált az akkoriban széles körben használt "what.exe", ami Bártházi András (@ba78) munkáját dícséri, sajnos már nyoma sincs az interneten (ennyit meg arról, hogy minden megtalálható). Ez a kis program (1997 körülre datálódik) képes volt megannyi formátumot azonosítani a fájl tartalma alapján. Az internetelérés még elég ritka volt, automatikus frissítésről pedig nem is lehetett még hallani, Andrásnak is gondolom akadt más kihívás az életében, a projekt éveken belül elhalt.
Új formátumok pedig napról napra jelennek meg, a what.exe egyre kevésbé volt aktuális. Ekkor jött az ötlet: újraírom! A dolog relatív egyszerű: a WAV hangfájlok első 16 karakterében benne van, hogy "RIFF WAVEfmt", a ZIP fájlok úgy kezdődnek, hogy "PK" (Phil Katz, a PKWARE alapítója és a PKZIP alkotója), az EXE fájlok rendre "MZ"-vel kezdődnek. Összegyűjtöttem hát az olyan fájltípusok listáját, amik könnyen azonosíthatók, esetleg van róluk dokumentáció vagy vannak példafájlok, amikből mintát lehet venni. 42 ilyet gyűjtöttem, persze tudtam, hogy sokkal több van, de ezzel már el lehet indulni.
El is jutottam egészen 15 fájltípusig, amikor észrevettem, hogy nem csak ba78 megvalósítása létezik a problémára, hanem sokan mások is nekiláttak, linuxon például a "file" nevű program ugyanerre a problémára ad megoldást, egyesek pedig mára már tízezernél is több formátumot tudnak azonosítani.
Forráskódom a githubon.