Ide GNU Emacs proti filozofii Unixu?
Unixová filozofia, minimalizmus a KISS… vďačný námet na úvahu. Zapadá do toho i GNU Emacs?
1 UNIX-ová filozofia
Aj keď GNU/linux vznikol ako slobodná náhrada proprietárneho UNIX-u, slovné spojenie Unixová filozofia sa používa dodnes a aj vo vzťahu k GNU/linuxu (*BSD,…).
Viacero zdrojov, napr. tento český preklad, zdôrazňujú základné požiadavky na program naplňujúci spomínané filozofické aspekty:
- program vykonáva len jednú vec (a poriadne),
- program spolupracuje (v zmysle definovaných vstupov a výstupov) s inými programami,
- a táto spolupráca nech je pomocou textových prúdov (lebo v Unixe - všetko je text!).
Navyše sa vyzdvihujú ďalšie aspekty (či už na spomínanej stránke alebo napr. v anglickej wikipedii), námatkou len:
- modularita, rozšíriteľnosť,
- transparentnosť, dokumentácia,
- prenositeľnosť predčí efektivitu,
- ukladanie dát v textovej podobe,
- skriptovanie,
- oprava chýb v jednom programe neovplyvní ostatné,
- prirodzenosť vývoja (príroda, veda, umenie) od jednoduchšieho k zložitejším celkom.
1.1 Emacs = moloch?
Kto zablúdi, alebo zámerne príde na linuxos.sk (lebo aj takí sa nájdu ☺), zrejme pozná GNU Emacs, ostatne i ja som mu venoval dosť pozornosti. Tento program, pôvodne dizajnovaný ako textový editor, sa snaží v sebe integrovať i (častokrát zdanlivo) nesúvisiace rozšírenia, námatkou spomeňme e-mailový klient, prehrávač hudby či pomodoro časovač. Preto oprávnene existuje povedomie, že je to niečo monolitické, obrovské, nenažrané (existovalo vtipné vysvetlenie slova "Emacs" ako "Eight Megabytes And Constantly Swapping", z čias, keď asi 8 MB bola poriadne veľká a použiteľná pamäť), a preto pomalé, ťažkopádne a vhodné len pre geekov.
1.2 Pohľad Luka Smitha a Prota
Jedným z kanálov na YouTube, ktorý dlhoročne sledujem, je i kanál Luka Smitha (jeho web na https://lukesmith.xyz/). Vo videu Why I DON'T Use EMACS! rozoberá zaujímavú myšlienku, práve súvisiacu s unixovou filozofiou. V skratke sa vyjadruje, že:
- je prirodzený prechod (pre určitú kategóriu užívateľov PC) od grafických programov až k príkazovému riadku; snaha o prechod na nižšiu úroveň je zdôvodnená potrebou pochopenia fungovania (systému, princípu), odstránením nepotrebných či redundantných vrstiev,
- Emacs pridáva naproti tomu ďalšiu vrstvu, a túto treba nielen ovládať, ale i konfigurovať a pochopiť, čo je krok späť,
- ovládnutím Emacsu možno dosiahnuť super-produktivitu a workflow, ale akceptoval by to, ak by bol Emacs v pozícii operačného systému (do ktorého ho mnohí, najmä ironicky či lakonicky, pasujú, pozn. autora).
Naproti tomu Protesilaos 'Prot' Stavrou, vo svete Emacsu známy filozof, prispievateľ a držiteľ ocenenia od Free Software Foundation, má trochu nadhľad… a on ma motivoval k podobným zamysleniam. A čiastočne som niektoré jeho myšlienky prevzal a tu ich aj uviedol.
1.3 Minimalizmus Unixu nie je dogma
Dogma je iný názov pre univerzálnu pravdu. Je to opak dialektického prístupu. Filozofia Unixu nie je nespochybniteľným zdrojom pravdy. Filozofia Unixu sa môže kritizovať. Skeptický pohľad znamená často nadhľad. Umožní to i opustenie názorov, ktoré by nás mohli obmedzovať, škodiť nám.
Počítačový guru chápe pravidlá a základy a vie sa k nim kriticky postaviť. Naopak - začiatočník má sklon k dogmatizmu - kvôli svojmu nadšeniu spojenému s nedostatkom nadhľadu.
2 Málinko z histórie + rýchly pohľad do útrob
Emacs začal ako súbor makier ("Editor Macros") pre starobylý textový editor s názvom TECO. Samotný TECO editor po čase upadol do zabudnutia, pretože keď sa Emacs stal samostatným programom, užívatelia ho začali používať namiesto TECO.
Všetci vieme, že za vznikom Emacsu je Richard M. Stallman. Pracoval na MIT, kde sa tešil programovací jazyk LISP veľkej popularite. Je preto pochopiteľné, že napísali malé jadro editora v jazyku C, ktorého hlavný účel spočíval v interpretácii dialektu jazyka lisp špeciálne určeného na editovanie textu, ktorý dostal názov Elisp. Vznikla tak nová (dnes sa nám zdá samozrejme prirodzená), zaujímavá paradigma vo vývoji softvéru - malé rýchle jadro + skriptovací jazyk.
Dá sa to predstaviť ako ako ekvivalent POSIX shellu ako #!/bin/sh
alebo akékoľvek prostredie, ktoré používame na vykonávanie shellovských skriptov. Pomocou Emacsu spúšťame alebo "vyhodnocujeme" kód Elisp-u.
Takže Emacs je teda v podstate interpreter programovacieho jazyka LISP plus sada funkcií definujúcich neuveriteľne dobre navrhnuté používateľské rozhranie s jediným cieľom - čo najefektívnejšie spracovať text.
Zásadným rozdielom oproti shellu ako bash je teda jeho interaktivita. Jednoducho povedané, Emacs je ako shell so superschopnosťami, ktorý na prvý pohľad vyzerá ako textový editor.
Takže ak považuje interpreter shellu ako nástroj vyznávajúci unixovú filozofiu, tak je prijateľné mať Lispový stroj na účely vyhodnocovania jazyka (E)Lisp.
Toto je najdôležitejší aspekt.
V Emacse sa akákoľvek interakcia vykonáva pomocou príkazov. A tieto príkazy sú jednoduché elisp-ové funkcie. Takže napríklad aj stlačenie šípky nahor vykoná nejaký príkaz - konkrétne previous-line. Alebo PgDn vykoná scroll-up-command (to up je správne, pretože sa text vyskroluje nahor).
Hlavnou dátovou štruktúrou Emacsu sú buffery. Pracujú s nimi všetky editačné a vizuálne príkazy. Ale súčasne sú, často na pozadí, spôsobom výmeny textových prúdov.
Dôležitou súčasťou sú tzv. režimy, nazývané módy. Je to súbor nastavení a dodatočných funkcií, ktoré menia správanie buffera a teda aj spôsob interakcie s užívateľom. Definujú také veci, ako napr. odsadenie textu, zvýrazňovanie syntaxe, priradenia klávesových skratiek (je jasné, že iný set skratiek potrebujeme pri hudobnom prehrávači a iný pri editácii textu). Je dôležité, že módy si navzájom dedia potrebné vlastnosti, takže spôsob pohybu a zobrazenia textu z textového módu prevezme napríklad mód prispôsobený pre konkrétny programovací jazyk (napr. c-mode).
V Emacse je všetko vizuálne pozlátko definované pomocou súboru vlastností. Tie definujú farby fonty, rezy a iné atribúty. Aj tieto sa dedia medzi jednotlivými režimami.
Aha, ešte dôležitý detail: to samotné jadro sa nevyvíja tak rýchlo (čo je aj výhoda), ale ostatné Elisp-vé balíky áno, čím sa jednak okamžite pridávajú nové funkcionality, odstraňujú chyby a samozrejme reagujú na nové trendy (čo bolo viditeľné napríklad s príchodom LSP).
3 Emacs nepotrebuje obranu
Ako každý vyspelý a dospelý systém, ani Emacs nepotrebuje obraňovať. A preto tento blogový zápisok treba vnímať ako niečo, čo môže neznalým rozšíriť obzory.
3.1 Modularita, rozšíriteľnosť
Toto bolo naznačené už skôr. Len uvediem, že moja aktuálna inštalácia Emacsu ukazuje, že existuje 5620 balíkov. To je neuveriteľné číslo a to hovoríme len o rozšíreniach, ktoré existujú v najbežnejších repozitároch a teda nezahŕňa tie, ktoré si môžeme inštalovať ručne. Pre určitý obraz si môže čitateľ prezrieť ponúkané balíky v (asi najväčšom) repozitári MELPA.
Unix je o špecializovaných nástrojoch, ktoré sa dajú navzájom kombinovať. A tento systém rozšírení v Emacse je jeho analógiou.
Moderný a pochybný pojem bloat sa spája s Emacsom neprávom. Niekto by mohol tvrdiť, že Emacs práve preto, že dokáže toho príliš veľa, nedodržuje unixové princípy.
Jedná sa o nepochopenie Emacsu a považovanie ho za textový editor.
A tieto všetečné otázky by mohli pokračovať: Prečo mám používať okná Emacsu, keď mám predsa tmux, ktorý sa špecializuje na multiplexovania? Prečo mám používať mailového klienta v Emacse, keď mám svoj mutt?
Elispový interpreter je tak silný, že toto všetko zvládne. Od editovania kódu po git klienta. Ak by toto zvládol bash
, tiež by sme ho považovali za bloat? (Áno, i v bashi existuje napr. správca súborov, čo je akiste zaujímavý počin.)
Jasné, vim, tmux, mutt, to všetko sú výborné programy. Ale čo im chýba, bude spomenuté v ďalšej kapitole.
3.2 Transparentnosť, dokumentácia
O Emacse je známe, že je to samodokumentujúci sa editor. Čo to znamená? Hádam to, že existuje fantastický systém "evidencie" funkcií, premenných, režimov a ich vzájomné (hyper-linkové prepojenie). Len na ukážku si skúsime vyhľadať funkciu org-html-export-as-html
. Po spustení príkazu describe-function
(klávesová skratka C-h f
) a zadaní funkcie sa nám zjaví jej opis. A odkaz, kde sa funkcia nachádza. Keď na neho prejdeme, tam si onú funkciu môžme preštudovať. Ako vidno na snímke, text, ktorým sa opisuje fungovanie a vlastnosť funkcie, je prvou vlastnosťou funkcie, uzavretej v úvodzovkách. Takže tá dokumentujúca funkcia Emacsu je závislá na disciplíne programátorov. A tá je, našťastie, na vysokej úrovni.
3.3 Prenositeľnosť predčí efektivitu & ukladanie dát v textovej podobe
O tomto len toľko, že filozofia bufferov, ako univerzálneho spôsobu predávania informácií je zárukou prenositeľnosti - ak sa údaje sa prenášajú ako prostý text.
Rozšírenia a ich skripty, ktoré tvora sústavu súborov (s príponou .el) sú distribuované v zdrojovej forme. Následne je ich možné preložiť do binárnej podoby (prípona .elc). To je môže byť robené automaticky (postará sa o to správca balíkov), alebo ručne, alebo aj vôbec nie.
Takže máme na výber - 100% prenositeľné, v zdrojovej forme, alebo skompilované. Obe fungujú bok po boku.
3.4 Minimalizmus
Čo to vlastne je?
Dalo by sa to definovať takto: Je to snaha o dosiahnutie najmenšej dostatočnej funkcionality - pre konkrétnu úlohu. To je kameň úrazu - pretože čo je považované za minimalistické pre jedného, nie je takým i pre druhého. Pre niekoho je minimalistickou obývačkou zostava sedačky a televízora, niekto potrebuje i barovú skrinku a niekto miriádu dekorácií. A to platí i pre softvér.
Lenže minimalizmus nesmie byť spájaný s nedokonalosťou, kvôli nedostatku vlastností, neúplnosti.
Ak hovoríme o písaní textu, tak by nám stačil asi aj písací stroj, alebo jeho najprimitívnejšia podoba vo forme notepadu. Ale - po nejakom čase - prídu úvahy: no možno by mi hodil i nástroj na kontrolu preklepov. Alebo by som chcel členiť text na kapitoly a interaktívne medzi nimi prechádzať.
Emacs ide touto cestou: minimalisticky zobrazuje a edituje text. Minimalisticky robí kontrolu preklepov (napr. pomocou aspell). Minimalisticky automaticky dopĺňa text. Minimalisticky robí záložné kópie.
V sume to už nebude minimalistické. Avšak sústava nástrojov minimalistická určite je.
4 Vim, tmux, mutt …
Jasné, sú to skvelé, minimalistické programy, v duchu spomínanej filozofie.
Toto majú spoločné.
Inak nemajú spoločné nič!
Skutočne. Chýba im prepojenie. Dokonca v pradávnych časoch nefungovali ani clipboardy na presun textu. Teraz to samozrejme ide, a kopírovanie textu z jedného terminálu do druhého nepredstavuje problém.
Ale čo im ešte chýba?
Vim má svoj špecifický systém ovládania. Tmux sa zase približuje Emacsu. Mutt je niečo medzi. Alpine je niečo ako Wordperfect.
Tieto programy nemajú spoločný základ a ich spolupráca je výsledkom (dôsledkom) iných programov. Je dôsledkom i prispôsobenia sa užívateľa.
Užívateľ sa naučí tie a tie klávesové skratky pre jeden program, tú a tú filozofiu používania pre iný program. Užívateľ sa prispôsobí programu.
Ostatne, prečo nie? Veď takto to bolo odjakživa (pre nás, čo sme prišli k GNU/linuxu z DOS-u alebo Windows-u).
A - keď je to odjakživa (podobný naratív ako "tradičná rodina"), prečo to ale nezmeníme, ak to možné zmeniť je?
Dovolím si zacitovať Prota doslovne:
Mali by ste teda prejsť na Emacs? Odpoveď znie "podľa toho…". Ak potrebujete jedinečný zážitok, ktorý vám umožní vytvárať prepojenia medzi vašimi rôznymi pracovnými postupmi, potom by som povedal "áno". V opačnom prípade je to naozaj na vás. Nech už však urobíte čokoľvek, robte to z pozície znalostí, s jasným cieľom a tomu zostaňte oddaní. Nesledujte trendy alebo škodlivé meme bez použitia zdravého rozumu. Emacs má (strmú) krivku učenia, ale tú majú aj všetky rôznorodé programy, ktoré sú zlepené ad-hoc spôsobom v zostavení systému pokročilého používateľa GNU/Linuxu. Musíte pracovať na dobrých veciach. (Alebo musíte pracovať pre dobro veci).
Výsledkom je, že dostanete to, čo každý pokročilý používateľ GNU/Linuxu vlastne chce: Jedinečný počítačový zážitok, ktorý minimalizuje vzdialenosť medzi níma tým, čo robí stroj.
Čo je lepší minimalizmus ako toto?
5 Záver
Tak ako je to teda?
Podľa mňa je Emacs plne kompatibilný s unixovou filozofiou. Vo svojej podstate to je minimalistický nástroj, ktorý však nemožno ovládnuť v krátkom čase.
Ja osobne ho používam (asi) 12 rokov, možno aj viac, a stále, malými krokmi, pracujem na jeho prispôsobeniu mojim potrebám. Aj tie potreby sa pochopiteľne menia.
Okrem vytrvalosti je potrebná aj miera tvrdohlavosti.
Naša práca a skúsenosť s počítačmi prechádza rôznymi fázami.
Každý z nás je iný, a to znamená, že to, čo vyhovuje jednému, nemusí byť vhodné pre iného. Nikto nemusí plniť štandardy nejakého iného človeka.
Nikto nemusí plniť nároky programu ako Emacs, ale, platí to aj opačne. Nikto nemusí plniť nároky (finančné, etické, morálne…) napr. Microsoftu a jeho produktov.
Vždy existuje alternatíva - vždy, za predpokladu, že sme ochotní zmeniť svoje myslenie a predstavy.
Nové vedomosti a skúsenosti majú svoju cenu. Ale to predpokladá úsilie a disciplínu. Ak niekto nemá čas, nechce vynakladať úsilie a nechá sa radšej kŕmiť tým, čo život ponúka, potom zostane v stave heteronómie i s jej falošným pohodlím.
Ide aj o prekonanie škodlivých racionalizácií; tých, ktoré človeka držia v pasci - každý pozná tie svoje zdôvodnenia, prečo to alebo ono nejde. Naproti tomu disciplína je o pridaní štruktúry do doterajšieho chaotického života.
Emacsu sa musíte sa venovať s otvorenou mysľou. Psychicky sa pripraviť - vzdať sa určitého krátkodobého poklesu produktivity v snahe dosiahnuť úspech v dlhodobom meradle.
Pre pridávanie komentárov sa musíte prihlásiť.
Pri čítaní tohto blogu ma prekvapili dve veci. Prvá, tvrdenie, že všetko je text, ja som doteraz čítával, že v linuxe je všetko súbor. No možno platia obidve možnosti. Druhá vec, ktorá ma prekvapila, je tvrdenie, že Emacs je minimalistický nástroj, ktorý však nie je možné ovládnuť v krátkom čase. To si trošku protirečí, nie?
v pohlade nizkeho kodovania je vsetko text.
je mozne to editovat, vyuzivalo / vyuziva sa to najma v Reverse Engineeringu (antiviry / viry, cracking) reverzna uprava ovladacov a pod.
V pohľade nízkeho kódovania je všetko skôr binárny kód, čiže niečo takéhoto 100011011001000111011110111.
to ano, aj v hexadecimalnej podobe. ale nemyslel som to tak.
pokial editujem podozrivu vec tak vidim aj priecinok ako text. (prava, umiestnenie vlastnika)
Minimalizmus a ovládanie… No mal som to na mysli tak, že to ovládanie Emacsu nie je úplne, no nazvime to, bežné. Proste tie klávesové chordy vyžadujú cvik a pod.
A pre dokonalé ovládanie je samozrejme čítať dokumentáciu, a to i v situáciách, kde si v iných programoch vystačíme s intuíciou.
Minimalizmus sa skôr týka funkčnosti, nie samotného používania.
Kedysi sa aj viedla diskusia, či nespraviť "distribúciu" Emacsu pre začiatočníkov (existujú skôr také [Doom Emacs,…], ktoré sa snažia imitovať Vim alebo sú to hotové riešenia pre programovanie v nejakom jazyku…), ale nakoniec, ak sa nemýlim, sa to uzavrelo, že je to zbytočnosť. Proste ak niekto začne s Emacsom a niečo si o ňom prečíta, tak musí očakávať prvotné problémy. Hoci, aspoň ako hovorí moja skúsenoť, prechod z "bežných" editorov na Emacs je jednoduchší, ako na Vim, ten so svojimi režimami môže spôsobovať (prvotné) zmätky.
pekne zamyslenie.
osobne som na strane Prota a aj som sa na redite minule vyjadril.
Odinstalovavam vim, tinyvim a vim common.
preco? lebo pouzivam emacs
je to o zvyku. ked so zacal pouzivat linux tak aj emacs. vim mi nikdy nesadol a skusal / pouzival som ho v praci ale vzdy som to vzdal a vratil sa k emacsu
momentalne , kedze uz neadminujem, tak uz skor na scriptovanie a tvorbu pouzivam mousepad alebo visualcode (win)
Mousepad… pozrel som si ho webe. Až doteraz som si myslel, že to vlastne taký primitívny Notepad či Leafpad. Ale nie je *pad ako *pad ☺. Zdá sa to "zručné" ako Gedit či Geany.
veru skor gedit, mousepad nie je tak tazky editor ako Geany ale ma kopec funkcii.
a mam ho trochu upraveny (obr)
co sa tyka sialenosti skratiek emacs a vim su niekedy na odstrel :D :D :D
Ak človek tie skratky aktívne používa, tak by "vojdu" do ruky. Ak nejakú zabudne, vždy sa dá použiť klasický M-x príkaz (s fuzzy hľadaním), alebo rozšírenie Which-key.
Na pozadí každej divnej skratky je ale akási mnemotechnická pomôcka. Napr. šialený chord C-x n d je v podstane uvádzací prefix C-x a potom n ako narrow a d ako defun. To spôsobí zobrazenie iba aktuálnej funkcie. Dá sa na to zvyknúť.
Ktovie, koľko (stoviek) takýchto skratiek človek aktívne používa a koľko ich má niekde v pozadí mozgu. To by vysvetľovalo, prečo sa zabúda na výročia svadby a dátumy narodenia blízkych :)