Právě že ta svoboda jazyka je u modulů nutná, jakmile by měly být jedině v C, tak je většina lidí nebude umět napsat, ačkoli mohou být dobrými programátory. Osobně preferuji unixový přístup STDIN-STDOUT, a to zvláště proto, že by se tak moduly velmi dobře testovaly (třeba CUPS backendy jsou také běžné spustitelné soubory, které mají definované argumenty+vstup+výstup; když cups netiskne, je kolikrát fajn, že lze spustit backend ručně, případně i přes strace).
Pod pojmem "modul" myslím adresář, který by obsahoval jak spustitelné, tak nespustitelné soubory. Ty spustitelné by mohly být napsány třeba v C nebo by to mohly být i skripty (díky shebang hlavičce je to jedno). Jejich úkolem by bylo provádět akce na základě čtení či zápisu do virtuálního filesystému. Statické soubory by byly různá metadata.
Daemon by pak, podle přístupu do virtuálního filesystému, rozhodl, na který spustitelný soubor je virtuální cesta namapována, spustil by ten program a provázal jeho stdin/stdout s virtuálním souborem.
Daemon by se rozhodoval podle mapy "virtuální cesta - program". Tato mapa by mohla být definována jak ve statických souborech, tak i generována dynamicky - například pro virtuální cestu /setup/network/eth0. Ačkoli většina mapování by šla zvládnout regulárními výrazy.
Příklad:
cat /setup/pgsql/current_locks
Někdo, kdo by měl jinou verzi Postgresu, by měl pod klíčem "pgsql" registrován odlišný modul. Též by provedl "cat /setup/pgsql/current_locks", ale odlišný modul by, samozřejmě, provedl jinou činnost.
---
Co se týče uživatelského rozhraní, o němž jsem psal, že by mohlo být generováno i automaticky, součástí modulu by tedy byla metadata pro tvorbu formulářů. Tento soubor by daemon exportoval stejně jako jiné soubory, třeba jako /setup/network/ui.xml. Záleželo by pak na aplikaci, zda definice využije nebo ne.
Zdá se mi, že to vlastně vůbec nebude složité ;-)
Ještě je nutné vyřešit zámky při přístupu do souborů, práva či stream (tj. že by program z modulu zůstal spuštěn a zpracovával by více požadavků, jako server). A určitě pár dalších věcí.
---
pozn. Proč by tohle nemohlo být tak, že by místo FUSE byly na těch místech přímo spustitelné programy? a) nebylo by to dynamické, b) nebylo by to použitelné přes síť