Unix-filosofia

Unix-filosofia on tapa tehdä asioita, joka liitetään Unix-käyttöjärjestelmään.

Pääpiirteet  
Unix-käyttöjärjestelmä ei noudata yhtä tiettyä tapaa tehdä asioita, mutta sitä on kuvailtu minimalistiseksi ja modulaariseksi periaatteeksi, jota Malcolm Douglas McIlroy on kuvannut seuraavasti:
 Tee yksi ohjelma suorittamaan yksi asia hyvin. Uutta asiaa varten tee uusi ohjelma sen sijaan että monimutkaistat vanhaa ohjelmaa uusilla ominaisuuksilla.
 Odota ohjelman tulosteen olevan syöte toiselle vielä tuntemattomalle ohjelmalle. Älä sotke tulostetta tarpeettomalla tiedolla. Vältä tiukasti sarakkeistettua tai binäärimuotoista tulostetta. Älä odota interaktiivista syötettä.
 Suunnittele ohjelmat, jopa käyttöjärjestelmät, kokeiltavaksi varhain, ideaalisesti viikoissa. Älä epäröi heittää pois kömpelöitä osia ja toteuttaa ne uudelleen.
 Käytä työkaluja mieluummin kuin kokemattomia apulaisia ohjelmointityön helpottamisessa, edes jos tarvitset kiertotietä ja odotat heittävästi pois osan niistä lopuksi.

McIlroy on myöhemmin tiivistänyt asiaa Peter H. Salusin kirjassa A Quarter Century of Unix:
 Kirjoita ohjelmia jotka tekevät yhden asian ja tekevät sen hyvin. Kirjoita ohjelmia toimimaan yhdessä. Kirjoita ohjelma tukemaan tekstivirtaa koska se on universaali rajapinta.

Brian Kernighan vaikutti filosofian popularisointiin kehittämällä useita erikoistuneita apukieliä: ratfor, eqn, awk ja pic.

Tähän kontrastina on tekniikan muuttuminen: käyttöjärjestelmän kehitysaikana ohjelmia kohdeltiin kuten tieteellistä ja matemaattista tietoa toisin kuin kaupallisia tuotteita.

Eric Raymond avaa filosofiaa vielä lisää luetteloimalla 17 viitteellistä ohjenuoraa kirjan The Art of Unix Programming alaluvussa Basics of the Unix Philosophy.

Kritiikki

The UNIX-haters handbook 
Unix-filosofiaa kritisoitiin 1990-luvun alussa julkaistussa The UNIX-haters handbook -teoksessa ():
 Kirjan toimittajien mukaan Unix-lähestymistapa johtaa ratkaisuihin, jotka tehdään hätäisesti ilman kunnollista arkkitehtuuriajattelua, ja sitten nämä ratkaisut kanonisoidaan eli julistetaan ajattomiksi klassikoiksi. Esimerkiksi heidän mielestään tällainen ratkaisu on lukitustiedostot - väliaikaiset tiedostot ilman sisältöä, jotka on luotu merkkinä siitä, että jokin ohjelma on suoritusvaiheessa.
 X Window System ikkunointijärjestelmää on arvosteltu ohjelmistoalustan erottamisesta käytännöstä, mikä on johtanut UNIX-standardin puuttumiseen käyttöliittymäkäytäntöjä varten ja suuriin vaikeuksiin graafista käyttöliittymää hyödyntävien sovellusten kehittämisessä.
 NFS:ää on kritisoitu sen luonnostaan virheellisestä lähestymistavasta arkkitehtuuriin - pyrkimyksestä luoda tilaton tiedostopalvelin, vaikka se on pohjimmiltaan mahdotonta. Kun kävi ilmeiseksi, että joitakin tärkeitä asioita ei voitu tukea, NFS:ään liitettiin ”kainalosauva” nimeltä lockd-prosessi.

Samaan aikaan tässä kirjassa kritisoidut lähestymistavat, jotka aloitettiin Unixista, ovat vakiintuneet sujuvasti Microsoft Windowsissa ja Applen Mac OS:ssä.

Unix-työkaluohjelmien ylityöstäminen
On kiistaa siitä, missä määrin Free Software Foundationin GNU-projektin ohjelmat noudattavat Unix-filosofian periaatteita. Monet sanoisivat ei, koska GNU-työkalut ovat suurempia ja sisältävät enemmän ominaisuuksia kuin Unix-vastineensa. Vuonna 1983 Rob Pike kirjoitti artikkelin, jossa hän kritisoi BSD-järjestelmissä toteutettujen Unix-perusominaisuuksien laajentamista, kuten cat-komennon tapauksessa.

Käyttöliittymä 
Datamation-lehdessä vuonna 1981 julkaistussa artikkelissa ”The truth about Unix: The user interface is horrid” (Totuus Unixista: käyttöliittymä on kauhea) Don Norman kritisoi Unixin suunnittelufilosofiaa siitä, ettei se ollut kiinnostunut käyttöliittymästä. Norman kirjoitti asiasta kognitiotieteen taustansa ja silloisen kognitiivisen suunnittelun näkökulmasta. Hän keskittyi siihen, miten loppukäyttäjät ymmärtävät ja muodostavat tai eivät muodosta  henkilökohtaista kognitiivista mallia järjestelmistä.  Unixin tapauksessa väärinymmärryksen seurauksena virheet, kuten tunnin työajan menettäminen ovat aivan liian helppoja.

Lähteet

Unix
Ohjelmistotuotanto