Filosofie Unixu
Filosofie Unixu je soubor kulturních norem a filosofických přístupů k vytváření softwaru, založený na zkušenostech předních vývojářů operačního systému Unix.
Doug McIlroy: Čtvrt století UNIXu
Doug McIlroy, tehdejší ředitel Výzkumného počítačového oddělení Bellových laboratoří a autor unixových rour, shrnul filosofii unixu následovně:[1]
Toto je filosofie Unixu: Pište takové programy, které dělají jen jednu věc a dělají ji dobře. Pište programy tak, aby spolupracovaly. Pište programy pro Standardní proudy, neboť se jedná o univerzální rozhraní.
Toto se často zkracuje na: „Pište takové programy, které dělají jen jednu věc a dělají ji dobře.“
Eric Raymond
Eric S. Raymond, shrnul ve své knize The Art of Unix Programming,[2] filosofii Unixu jako široce užívaný KISS princip („Zachovej to jednoduché, hlupáku!“)[3] Sestavil také sérii pravidel pro psaní programů:
- Pravidlo modularity: Pište jednoduché části, které budou spojeny bezchybným rozhraním.
- Pravidlo srozumitelnosti: Srozumitelnost je lepší než šikovnost.
- Pravidlo kompozice: Navrhujte programy tak, aby mohly být napojeny na jiné programy.
- Pravidlo oddělování: Oddělujte postupy od mechanismů; oddělujte rozhraní od nástrojů.
- Pravidlo jednoduchosti: Programujte jednoduše; složitě jen tam, kde je to nezbytné.
- Pravidlo úspornosti: Pište rozsáhlé programy jen je-li zřejmé, že to jiným způsobem nejde.
- Pravidlo přehlednosti: Programujte přehledně, aby byly audity kódu a odstraňování chyb jednodušší.
- Pravidlo robustnosti: Robustnost je potomek přehlednosti a jednoduchosti.
- Pravidlo reprezentace: Převeďte znalosti do kódu, aby mohl být program hloupý a robustní.[4]
- Pravidlo nejméně překvapivého: Při návrhu rozhraní vždy dělejte tu nejméně překvapivou věc.
- Pravidlo ticha: Nemá-li program co nového říct, neměl by říkat nic.
- Pravidlo opravy: Musíte-li selhat, selžete hlasitě a co nejdříve.
- Pravidlo úspornosti: Programátorův čas je drahý, šetřte ho použitím strojového času.
- Pravidlo rozmnožování: Vyhněte se ručnímu psaní kódu; kdykoliv to jde, pište programy, které píšou další programy.
- Pravidlo optimalizace: Vytvořte správně fungující program, než ho začnete optimalizovat.
- Pravidlo pestrosti: Nevěřte pouze v jedno správné řešení.
- Pravidlo rozšiřitelnosti: Plánujte do budoucnosti, protože ta přijde dříve, než si myslíte.
Mike Gancarz: Filosofie Unixu
V roce 1994 Mike Gancarz (člen týmu, který navrhl X Window System), spojil své zkušenosti z Unixu a z debat s ostatními programátory a lidmi z ostatních oborů závisejících na Unixu, aby nakonec přišel s Filosofií Unixu, kterou shrnul do devíti stěžejních bodů:
- Malé je krásné.
- Udělejte každý program tak, aby dělal jednu věc dobře.
- Vytvořte prototyp co nejdříve.
- Upřednostňujte přenositelnost před efektivitou.
- Uchovávejte data v prostých textových souborech.
- Uplatněte využitelnost softwaru ve svůj prospěch.
- Použijte shellové skripty ke zvýšení přenositelnosti a využitelnosti.
- Vyhněte se svazujícímu uživatelskému rozhraní.
- Udělejte z každého programu filtr.
Horší je lepší
Richard P. Gabriel podotknul, že stěžejní výhodou Unixu je skutečnost, že je postaven na filosofii, kterou označil jako „horší je lepší“, kdy jsou implementace a jednoduchost rozhraní důležitější než ostatní vlastnosti — včetně správnosti, konzistence a úplnosti. Gabriel tvrdí, že tento model vyniká klíčovými evolučními výhodami, přestože zpochybňuje kvalitu některých výsledků.
Jako příklad můžeme uvézt monolitické jádro Unixu. Pokud je signál odeslán procesu, který je dlouhodobě blokován aktivním vstupem/výstupem v jádře, co by se se signálem mělo stát? Měl by být pozdržen, třebaže na dlouhou dobu (možná donekonečna), než vstup/výstup skončí? Odesílatel signálu by nemohl být ukončen, dokud běží proces v privilegovaném módu, s citlivými daty v zásobníku. Měl by kernel zrušit systémové volání a uložit ho, aby ho později znovu vyvolal, za předpokladu, že se odesílatel signálu je úspěšně ukončen?
V těchto případech upřednostňovali Ken Thompson a Dennis Ritchie jednoduchost nad dokonalostí. Unixový systém čas od času ukončí systémové volání předčasně a vrátí chybu, která říká, že nic neudělal - „Přerušené systémové volání“, v dnešních systémech chyba č. 4 (EINTR
). Systémové volání je samozřejmě přerušeno, aby mohl být obsloužen chybový signál. Tato situace může nastat jen u několika dlouho trvajících systémových volání, jako jsou read()
, write()
, open()
nebo select()
. Výhodou je, že díky tomu je systém I/O mnohem jednodušší k návrhu a pochopení. Drtivá většina uživatelských programů nebyla vůbec ovlivněna vzhledem k tomu, že neobsluhují jiné signály než SIGINT
nebo Control-C, při jejichž volání by byly okamžitě ukončeny. U zbylých několika programů — jako například shell nebo textové editory, které reagují na jednotlivé stisky kláves — lze systémová volání obalit tak, aby byla znovu odeslána v případě EINTR
chyby. Tím byl tento problém vyřešen jednoduchým způsobem.
Citace
- „Unix je jednoduchý. Jen musí být člověk génius, aby porozuměl jeho jednoduchosti.“ – Dennis Ritchie
- „Unix nebyl navržen, aby zabránil jeho uživatelům dělat hloupé věci, protože by jim tím zabránil dělat ty chytré.“ – Doug Gwyn
- „Unix nikdy neříká 'prosím'.“ – Rob Pike
- „Unix je uživatelsky přívětivý. Nerozlišuje však, ke kterým uživatelům.“ – Steven King
- „Ti, kteří nerozumí Unixu, jsou odsouzeni ho znovu objevit, mizerně.“ – Henry Spencer
Reference
V tomto článku byl použit překlad textu z článku Unix philosophy na anglické Wikipedii.
- Basics of the Unix Philosophy. www.faqs.org [online]. [cit. 2013-08-25]. Dostupné v archivu pořízeném dne 2010-07-15.
- RAYMOND, Eric. The Art of Unix Programming. [s.l.]: Addison-Wesley, 2003-09-19. Dostupné online. ISBN 0-13-142901-9. (anglicky)
- RAYMOND, Eric. The Art of Unix Programming. [s.l.]: Addison-Wesley, 2003-09-19. Dostupné online. ISBN 0-13-142901-9. Kapitola The Unix Philosophy in One Lesson. (anglicky)
- RAYMOND, Eric. The Art of Unix Programming. [s.l.]: Addison-Wesley, 19 September 2003. Dostupné online. ISBN 0-13-142901-9. Kapitola Basics of the Unix Philosophy. (anglicky)
Literatura
- The Unix Programming Environment by Brian Kernighan and Rob Pike, 1984
- Program Design in the UNIX Environment - The paper by Pike and Kernighan that preceded the book.
- Notes on Programming in C, Rob Pike, September 21, 1989
- A Quarter Century of Unix, Peter H. Salus, Addison-Wesley, May 31, 1994 (ISBN 0-201-54777-5)
- Philosophy — from The Art of Unix Programming, Eric S. Raymond, Addison-Wesley, September 17, 2003 (ISBN 0-13-142901-9)
- Final Report of the Multics Kernel Design Project by M. D. Schroeder, D. D. Clark, J. H. Saltzer, and D. H. Wells, 1977.
- The UNIX Philosophy, Mike Gancarz, ISBN 1-55558-123-4
Související články
- Unix
- Plan 9 from Bell Labs
- Roura (software)
- The UNIX-HATERS Handbook
- Softwarové inženýrství
- Hacker
Externí odkazy
- The Unix Philosophy: A Brief Introduction - by The Linux Information Project (LINFO)
- Joel on Software - Biculturalism
- The truth about Unix: "The user interface is horrid" (1981)
- The Unix Philosophy
- Why the Unix Philosophy still matters