Túl bonyolult
Ha egy egyéves kisgyereknek adnak egy kristályvázát, akkor előbb-utóbb, amikor elveszti iránta az érdeklődését, szétnyitja a kezét, a váza leesik és összetörik. Ez azért van, mert még nem érti a gravitációt, így nem látja át a tettének a következményeit.
Izgalmas időket élünk. A 2018 január elején napvilágot látott processzorhibák megrázták a számítástechnológiai világot, 2017 az informatikai betörések éve volt, sohasem látott mennyiségben hatoltak be rendszerekbe, ahonnan adatokat vittek el vagy egy zombihálózat részévé tették. Mindezek természetesen nem véletlenül, előzmények nélkül történtek, és ha a nagy képet nézzük, talán nyilvánvaló, hogy ha így folytatjuk tovább, a helyzet csak rosszabb lesz.Hardver
Ma egy átlagos processzorban legalább egymilliárd tranzisztor található, a komolyabbakban ennek a többszöröse, ami a nagy számok törvényei alapján biztosan nem lesz tökéletes. Egy véletlenszerűen kiválasztott Intel Core i7-es CPU dokumentációjában például két oldalnyi, a gyártó által ismert és javítatlan hiba található, amelyek instabilitáshoz, helytelen értékek visszaadásához és nem konzisztens működéshez vezethetnek. Ezek természetesen nem újkeletű dolgok, Theo de Raadt, a biztonságot a legfontosabb szempontnak tartó OpenBSD operációs rendszer vezető fejlesztője már 2007-ben, az akkor aktuális Core 2 processzorokról írta, hogy legalább húsz-harminc olyan buggal rendelkeznek, amit szoftveresen nem lehet javítani.
A védekezés ezek ellen nehéz vagy lehetetlen, a CERT-nél eredetileg a hardverek cseréjét ajánlották, aztán ezen valamiért enyhítettek (már csak szoftverfrissítést említenek, ami a Spectre esetében biztosan kevés). A Meltdown elvileg kikerülhető az operációs rendszer módosításával, de ez 5-30, bizonyos esetekben akár ötven százalékos teljesítményvesztéssel jár, azzal arányosan, hogy az adott szoftver milyen gyakran fordul a kernelhez.
A biztonsággal foglalkozó szakember, Bruce Schneier szerint 2018 a hardveres hibák éve lesz, és ebben valószínűleg igaza van. Az egyre integráltabb elektronikai alkatrészek egyes moduljai és az azok közti kommunikáció egyre komplexebb, és készítőik egyszerűen nem látják át az összes lehetséges kombinációt. Májusban újabb sérülékenységet lepleztek le, de még legalább hat várható a közeljövőben, amelyek közül az egyik sebezhetőség várhatóan azért lesz nagy hatású, mert virtuális gépekből lehet elérni a gazda erőforrásait, azaz a "felhő" szolgáltatók lesznek nagy bajban, valószínűleg jelentős teljesítménycsökkenés várható a rendszereikben.
Aki figyeli a számítástechnikai eszközök fejlődését, feltűnhetett, hogy a processzorok az utóbbi tíz évben a korábbiakhoz képest alig fejlődtek, átlagosan öt százalékkal voltak gyorsabbak az előző generációhoz képest. Ez nem csak az Intel dominálta x86-os, hanem az ARM architektúrára igaz, mert bár ott az elején nagy volt a lendület, 2014 óta nem volt igazán nagy áttörés a teljesítmény/fogyasztás fronton. A mobiltelefongyártók jobb híján csak azzal tudnak zsonglőrködni, hogy egyre nagyobb akkumulátorokat zsúfolnak a készülékekbe, ami csak egy ideig jelent megoldást, mert az energiatárolás elvei nem változtak az utóbbi húsz évben, és nincs is remény rá, hogy javulni fog a hatékonyság.
A fentiek alapján alapján várható, hogy a hardverek teljesítménye legjobb esetben stagnálni fog, de jó eséllyel érezhetően vissza is esik.Szoftver
Tehát a számítógépek lassulása várható, de átlagfelhasználókat ez kevésbé érinti, hisz a legtöbb szoftver az idő kilencvenkilenc százalékában arra vár, hogy történjen egy billentyűleütés vagy egérkattintás, aztán pártized másodperc alatt végez a feladattal. A szerverek már más kategóriába esnek, ahol sok az IO, észrevehető a változás, mérések szerint a PostgreSQL 10-20%-kal reagál lassabban.
Erős növekedés tapasztalható minden évben az informatikai betörésekből származó "ellopott" adatok számában, 2016-ban még "csak" párszáz milliós nagyságrendben vittek mindent, 2017-ben csak a River City Media nevű hirdetőcégtől 1,3 milliárd rekordos adatbázis került illetéktelenek kezébe, de az Equifaxtól lemásolt kétszázmilliós, különösen érzékeny adatokat tartalmazó adatbázis volt az igazán nagy fogás.
Persze évtizedes múlttal rendelkező szoftvercégek is követnek el amatőr hibákat, az Apple egyik fórumán osztotta meg az egyik gyanútlan felhasználó, hogyan lehet az operációs rendszer gyökér felhasználójával jelszó nélkül belépni (kétszer kell lenyomni az Entert).Szivárgó absztrakciók
Az embert az állatvilágból többek között az absztrakció képessége emeli ki, aminek a segítségével el tudunk vonatkoztatni bizonyos dolgoktól, és csak a lényeggel foglalkozunk. Ennek köszönhetjük például, hogy létezik a matematika és a számítógépek, az informatika pedig nem is működne elvonatkoztatás nélkül. Joel Spolsky, a Stack Overflow alkotója 2002-ben fogalmazta meg a szivárgó absztrakciók törvényét, amelynek lényege, hogy minden absztrakció egy bizonyos fokig szivárog, azaz a valóság előre nem látható következményei problémákat okoznak.
A számítástechnikában az elvonatkoztatásnak megfigyelésem szerint még egy hatása van: minden absztrakció a program futását lassítja; erre a legjobb példa a függvényhívás, ahol az elején – többek között – le kell foglalni egy memóriaterületet a helyi változóknak, majd a végén fel kell szabadítani. Ezt akkor lehet észrevenni, ha egy ciklusban, sokszor futtatjuk a függvényt, mérhetően több idő kell neki, mintha a függvénytörzset másolás-beillesztés módon n-szer egymás után tennénk.
A Spectre típusú sérülékenységek is egy absztrakciónak köszönhetőek; ma sok szoftver és programozási nyelv C/C++ alapokon nyugszik, de a C-t a '70-es években olyan platformra tervezték, ahol a fizikai hardvert lehetett közvetlenül elérni a segítségével. Később viszont a processzorok sokkal gyorsabbak lettek, mint a RAM, ezért többszintű gyorstárat vezettek be, ami a program szemszögéből úgy látszik, mintha maga a memória lenne, viszont a háttérben a komplexitást extra hardverek kezelik. Ezek a cache-ek megosztottak, azaz a különböző programszálak elérhetik egymás memóriaterületeit, és ezzel meg is van a baj. A gépi kódra fordító programok is rendkívül összetettek, azért, hogy minél optimálisabb futást biztosítsanak, az LLVM forrása például kétmillió soros.Megoldás
John McAfee, akinek az antivírus szoftvere ismerős lehet az olvasó számára, fogalmazta meg a következő biztonsági sejtést: "Minden általunk kitalált logikai struktúra potenciálisan hack-elhető, és az minél összetettebb, annál biztosabb, hogy a feltörés meg fog történni."
A fentiek alapján nyilvánvaló, hogy minden probléma okozója a túlzott bonyolultság, mind hardver-, mind pedig szoftverszinten. Annyira sokféle esemény történhet, amit a készítőik egyszerűen nem látnak át, azaz az intelligenciájuk alacsonyabb, mint ami az átlátáshoz és a megoldáshoz szükséges lenne (így érthetővé válhat az írás első mondata). Ezt többféleképp is lehetne orvosolni:
Egy szoftver sosincs kész – bár ma ez egy általánosan elfogadott, de az egyik legkártékonyabb elv, ami a felhasználók életét mérgezi. Mindenhova tömik be az újabbnál újabb szolgáltatásokat, és aztán csodálkoznak, ha a rendszert feltörik. Minél kevesebbet tud egy program, annál biztonságosabb lehet, mert a kényelem-sebesség-featúrák trió egy tengelyen helyezkedik el a biztonsággal, és az egyiket mindig csak a másik kárára lehet növelni.
A cél elérésében nem segít minket a kapitalizmus és a szabadverseny, ezek miatt mindenki azt gondolja, hogy minél több mindent pakolunk egy hardverbe vagy szoftverbe, annál jobban fogják venni, de ez csak egy bizonyos szintig igaz, addig, amíg jobban kifizetődik így dolgozni, mint valamit egyszerűre és biztonságosra elkészíteni. De a hardverek lassulásával talán elindul egy pozitív folyamat, ahol minden csak épp annyit tud, épp annyi absztrakcióval rendelkezik, amennyire szükség van, és marketingértéke lesz annak, hogy "a mi termékünk butább, de biztonságosabb, mint a konkurenciáé". Ez viszont a jelenlegi fejlesztési trendeknek eléggé szembemegy, azaz meglehetősen fájdalmas lehet az egyszeri programozó számára.
■ Izgalmas időket élünk. A 2018 január elején napvilágot látott processzorhibák megrázták a számítástechnológiai világot, 2017 az informatikai betörések éve volt, sohasem látott mennyiségben hatoltak be rendszerekbe, ahonnan adatokat vittek el vagy egy zombihálózat részévé tették. Mindezek természetesen nem véletlenül, előzmények nélkül történtek, és ha a nagy képet nézzük, talán nyilvánvaló, hogy ha így folytatjuk tovább, a helyzet csak rosszabb lesz.
Hardver
Ma egy átlagos processzorban legalább egymilliárd tranzisztor található, a komolyabbakban ennek a többszöröse, ami a nagy számok törvényei alapján biztosan nem lesz tökéletes. Egy véletlenszerűen kiválasztott Intel Core i7-es CPU dokumentációjában például két oldalnyi, a gyártó által ismert és javítatlan hiba található, amelyek instabilitáshoz, helytelen értékek visszaadásához és nem konzisztens működéshez vezethetnek. Ezek természetesen nem újkeletű dolgok, Theo de Raadt, a biztonságot a legfontosabb szempontnak tartó OpenBSD operációs rendszer vezető fejlesztője már 2007-ben, az akkor aktuális Core 2 processzorokról írta, hogy legalább húsz-harminc olyan buggal rendelkeznek, amit szoftveresen nem lehet javítani.A védekezés ezek ellen nehéz vagy lehetetlen, a CERT-nél eredetileg a hardverek cseréjét ajánlották, aztán ezen valamiért enyhítettek (már csak szoftverfrissítést említenek, ami a Spectre esetében biztosan kevés). A Meltdown elvileg kikerülhető az operációs rendszer módosításával, de ez 5-30, bizonyos esetekben akár ötven százalékos teljesítményvesztéssel jár, azzal arányosan, hogy az adott szoftver milyen gyakran fordul a kernelhez.
A biztonsággal foglalkozó szakember, Bruce Schneier szerint 2018 a hardveres hibák éve lesz, és ebben valószínűleg igaza van. Az egyre integráltabb elektronikai alkatrészek egyes moduljai és az azok közti kommunikáció egyre komplexebb, és készítőik egyszerűen nem látják át az összes lehetséges kombinációt. Májusban újabb sérülékenységet lepleztek le, de még legalább hat várható a közeljövőben, amelyek közül az egyik sebezhetőség várhatóan azért lesz nagy hatású, mert virtuális gépekből lehet elérni a gazda erőforrásait, azaz a "felhő" szolgáltatók lesznek nagy bajban, valószínűleg jelentős teljesítménycsökkenés várható a rendszereikben.
Aki figyeli a számítástechnikai eszközök fejlődését, feltűnhetett, hogy a processzorok az utóbbi tíz évben a korábbiakhoz képest alig fejlődtek, átlagosan öt százalékkal voltak gyorsabbak az előző generációhoz képest. Ez nem csak az Intel dominálta x86-os, hanem az ARM architektúrára igaz, mert bár ott az elején nagy volt a lendület, 2014 óta nem volt igazán nagy áttörés a teljesítmény/fogyasztás fronton. A mobiltelefongyártók jobb híján csak azzal tudnak zsonglőrködni, hogy egyre nagyobb akkumulátorokat zsúfolnak a készülékekbe, ami csak egy ideig jelent megoldást, mert az energiatárolás elvei nem változtak az utóbbi húsz évben, és nincs is remény rá, hogy javulni fog a hatékonyság.
A fentiek alapján alapján várható, hogy a hardverek teljesítménye legjobb esetben stagnálni fog, de jó eséllyel érezhetően vissza is esik.
Szoftver
Tehát a számítógépek lassulása várható, de átlagfelhasználókat ez kevésbé érinti, hisz a legtöbb szoftver az idő kilencvenkilenc százalékában arra vár, hogy történjen egy billentyűleütés vagy egérkattintás, aztán pártized másodperc alatt végez a feladattal. A szerverek már más kategóriába esnek, ahol sok az IO, észrevehető a változás, mérések szerint a PostgreSQL 10-20%-kal reagál lassabban.Erős növekedés tapasztalható minden évben az informatikai betörésekből származó "ellopott" adatok számában, 2016-ban még "csak" párszáz milliós nagyságrendben vittek mindent, 2017-ben csak a River City Media nevű hirdetőcégtől 1,3 milliárd rekordos adatbázis került illetéktelenek kezébe, de az Equifaxtól lemásolt kétszázmilliós, különösen érzékeny adatokat tartalmazó adatbázis volt az igazán nagy fogás.
Persze évtizedes múlttal rendelkező szoftvercégek is követnek el amatőr hibákat, az Apple egyik fórumán osztotta meg az egyik gyanútlan felhasználó, hogyan lehet az operációs rendszer gyökér felhasználójával jelszó nélkül belépni (kétszer kell lenyomni az Entert).
Szivárgó absztrakciók
Az embert az állatvilágból többek között az absztrakció képessége emeli ki, aminek a segítségével el tudunk vonatkoztatni bizonyos dolgoktól, és csak a lényeggel foglalkozunk. Ennek köszönhetjük például, hogy létezik a matematika és a számítógépek, az informatika pedig nem is működne elvonatkoztatás nélkül. Joel Spolsky, a Stack Overflow alkotója 2002-ben fogalmazta meg a szivárgó absztrakciók törvényét, amelynek lényege, hogy minden absztrakció egy bizonyos fokig szivárog, azaz a valóság előre nem látható következményei problémákat okoznak.A számítástechnikában az elvonatkoztatásnak megfigyelésem szerint még egy hatása van: minden absztrakció a program futását lassítja; erre a legjobb példa a függvényhívás, ahol az elején – többek között – le kell foglalni egy memóriaterületet a helyi változóknak, majd a végén fel kell szabadítani. Ezt akkor lehet észrevenni, ha egy ciklusban, sokszor futtatjuk a függvényt, mérhetően több idő kell neki, mintha a függvénytörzset másolás-beillesztés módon n-szer egymás után tennénk.
A Spectre típusú sérülékenységek is egy absztrakciónak köszönhetőek; ma sok szoftver és programozási nyelv C/C++ alapokon nyugszik, de a C-t a '70-es években olyan platformra tervezték, ahol a fizikai hardvert lehetett közvetlenül elérni a segítségével. Később viszont a processzorok sokkal gyorsabbak lettek, mint a RAM, ezért többszintű gyorstárat vezettek be, ami a program szemszögéből úgy látszik, mintha maga a memória lenne, viszont a háttérben a komplexitást extra hardverek kezelik. Ezek a cache-ek megosztottak, azaz a különböző programszálak elérhetik egymás memóriaterületeit, és ezzel meg is van a baj. A gépi kódra fordító programok is rendkívül összetettek, azért, hogy minél optimálisabb futást biztosítsanak, az LLVM forrása például kétmillió soros.
Megoldás
John McAfee, akinek az antivírus szoftvere ismerős lehet az olvasó számára, fogalmazta meg a következő biztonsági sejtést: "Minden általunk kitalált logikai struktúra potenciálisan hack-elhető, és az minél összetettebb, annál biztosabb, hogy a feltörés meg fog történni."A fentiek alapján nyilvánvaló, hogy minden probléma okozója a túlzott bonyolultság, mind hardver-, mind pedig szoftverszinten. Annyira sokféle esemény történhet, amit a készítőik egyszerűen nem látnak át, azaz az intelligenciájuk alacsonyabb, mint ami az átlátáshoz és a megoldáshoz szükséges lenne (így érthetővé válhat az írás első mondata). Ezt többféleképp is lehetne orvosolni:
- az IQ növelésével – mivel egy új generáció 20-25 év, jónéhány évtizeden belül nem várható számottevő javulás
- az eszköztár javításával – ezek újabb absztrakciók, amik szivárognak, azaz így csak elodázzuk, másra hárítjuk a felelősséget
- a komplexitást csökkentjük.
Egy szoftver sosincs kész – bár ma ez egy általánosan elfogadott, de az egyik legkártékonyabb elv, ami a felhasználók életét mérgezi. Mindenhova tömik be az újabbnál újabb szolgáltatásokat, és aztán csodálkoznak, ha a rendszert feltörik. Minél kevesebbet tud egy program, annál biztonságosabb lehet, mert a kényelem-sebesség-featúrák trió egy tengelyen helyezkedik el a biztonsággal, és az egyiket mindig csak a másik kárára lehet növelni.
A cél elérésében nem segít minket a kapitalizmus és a szabadverseny, ezek miatt mindenki azt gondolja, hogy minél több mindent pakolunk egy hardverbe vagy szoftverbe, annál jobban fogják venni, de ez csak egy bizonyos szintig igaz, addig, amíg jobban kifizetődik így dolgozni, mint valamit egyszerűre és biztonságosra elkészíteni. De a hardverek lassulásával talán elindul egy pozitív folyamat, ahol minden csak épp annyit tud, épp annyi absztrakcióval rendelkezik, amennyire szükség van, és marketingértéke lesz annak, hogy "a mi termékünk butább, de biztonságosabb, mint a konkurenciáé". Ez viszont a jelenlegi fejlesztési trendeknek eléggé szembemegy, azaz meglehetősen fájdalmas lehet az egyszeri programozó számára.
minden absztrakció a program
Tudsz mondani konkrét példát, hogy mire szeretne a cikk kilyukadni? Fura zárszó, hogy reménykedjünk a gépek lassulásában. Ez senkinek sem érdeke. Ha a cikkben kritizált "absztrakciók" eltűnnének, te is elveszítenéd a munkádat, ugyanis egy örökkévalóság lenne pl CPU cache-ek nélkül egy weboldal renderelése.
a lokális változók a stacken
A szoftver olyan, mint a gáz, mindig kitölti a rendelkezésre álló teret. Erre a legaktuálisabb példa volt, amikor bevezették a böngészők többszálú működését, rövid ideig észrevehető volt, hogy az oldalak gyorsabban töltődtek be, de a fejlesztők elkezdték kihasználni ezt a lehetőséget, és ma már nem nehéz megfektetni egy akárhány magos gépet egy jól elkészített website-tal, például webworkerekben futó bitcoin bányászattal.
A stack-en belül is kell
Mindezektől függetlenül természetesen lehet értelme az inline-olásnak fastpathon. De a fordítók sem inline-olnak mindent, amit lehetséges lenne, mert nagyon hatékonytalan lenne. Valójában a függvényhívás inkább arra jó példa, hogy az értelmes absztrakciók jótékony hatással lehetnek a teljesítményre.
Nem a gépeknek kellene lassulnia, hanem a programozóknak kéne megtanuljanak normálisan programot írni. Amíg egyetemről kijönnek úgy emberek, hogy nem értik pl egy hashtable (vagy akár egy láncolt lista!) működését, vagy lefagynak egy maradékos osztástól, addig nem a fejlődő hardware-ben kell keresni az okokat. Aki a mai hardware-eken rossz kódot ír, az a lassabb hardware-eken is rossz kódot írna. Csak még több lenne a használhatatlan rendszer.
Valahogy nem érezni, hogy
PHP Depend
Videó
Az előadás arról szól, hogy a biztonságra milyen hatással van a növekvő bonyolultság.