"A Fehér Ház is a C és a C++ elhagyására buzdít"

Címkék

[...]

A Fehér Ház Office of the National Cyber ​​Director (ONCD) hivatala a héten kiadott ajánlásában arra sürgeti a technológiai vállalatokat, hogy váltsanak memóriabiztos programozási nyelvek használatára a biztonsági kockázatok csökkentésének érdekében, kiemelten ajánlva a Rustot, a Javascriptet, a Java-t, vagy a C#-t. A jelentés a Biden elnök által 2023 márciusában aláírt Nemzeti Kiberbiztonsági Stratégiára épül, amely az ország kiberterének védelmének terhét a szoftvergyártókra és szolgáltatókra hárította. A hivatal ezzel együtt javasolja, hogy a fejlesztők hagyjanak fel a programok C vagy C++ nyelven történő fejlesztésével - az említett két nyelvet különösen a kritikus rendszerek használatában tartja kockázatosnak a hivatal.

[...]

Részletek itt.

Hozzászólások

javascript:)

Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....

:)

 

Tudom kis orszag, kis foci. De ha itthon kellene ilyen szakmai kijelentest tenni, azt nalunk ki tenne meg?

Egy idoben Deutsch Tamas volt nalunk az informatikai zseni, most nem tudom ki lenne az ugyeletes tiszt.

Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....

Nyissátok meg a linkelt fehérházi pdf-et és keresettek rá a C#-ra és a Javascriptre benne! :)

@trey: nem lehetne rátenni erre a cikkre egy kis megjegyzést, hogy a "Figyelem, a HWSW cikke nem teljesen felel meg az idézett fehérházi ONCD jelentés tartalmának"? Pontosabban fogalmazva, egyetlen állítása sem állja meg a helyét.

Régóta vágyok én, az androidok mezonkincsére már!

Olyan kirekesztő ez a "Fehér" elnevezés. Most vettem észre, fuu de modern vagyok.
Pár jóképességű átnevezhetné, majd át is festhetnék szivárványosra. Jobban passzolna a mai usához.

Vortex Rikers NC114-85EKLS

Ez olyan, mintha Julika néni a panel 8-dik emeletéről adna mezőgazdasági meg növényvédelmi tanácsokat, mert hát neki is milyen szép a muskátli az erkélyen...

"Sose a gép a hülye."

Nem fake news. Egyes felmérések szerint Trump kijelentésének hatására (amiben valóban az "inject" ige szerepel és nem konkrétan a "drink" ige, de nem ez a lényeg), a lakosság 4%-a, kb. 10 millió amerikai tényleg megpróbált hipót inni vagy azzal gargalizálni. Saját bevallásuk szerint tették ezt az akkori elnök kijelentése miatt...

Egyes felmérések szerint

LOL :) De igen, fake news és propaganda. Trump kijelentése, bár nagyon rosszul volt megfogalmazva, értelmezhető korrekt és tudományosan helytálló állításnak is. Ugyanis nem csak vegyszerekről beszélt, hanem explicit módon az UV fényt is megemlítette. Ennek belső alkalmazására viszont valóban voltak kísérletek:

https://www.cedars-sinai.org/newsroom/reduced-viral-loads-seen-in-covid…

Szóval összefoglalva:

  1. Trump kijelentése folyó kutatásokról szólt, nem volt benne semmi felszólítás a lakosság felé.
  2. Bár elég rosszul fogalmazott, lehet teljesen korrekt módon értelmezni.

Több értelmezés közül kiválasztani a legrosszabbat, majd tényként eladni: propaganda.

Trump kijelentése, bár nagyon rosszul volt megfogalmazva, értelmezhető korrekt és tudományosan helytálló állításnak is.

Na akkor mégegyszer: az amerikai lakosság 4%-a úgy értelmezte, hogy hipót kell inni. Ez TÉNY. Szóval helyesen "értelmezhető lett volna korrekt" állításnak, de sokak által nem annak lett értelmezve.

Több értelmezés közül kiválasztani a legrosszabbat, majd tényként eladni: propaganda.

Itt most saját magadra gondoltál, ugye? Merthogy én konkrétan egy felmérést linkeltem, aminek a megléte és eredménye nem értelmezés, hanem TÉNY.

Látom, gondok vannak Nálad a "tény" definícióját illetően.

"az amerikai lakosság 4%-a úgy értelmezte, hogy hipót kell inni"

Viszonyitaskepp:

Az amerikai lakossag - ha jol emlekszem - 17%-a hisz a Bigfootban. A 4%-ot valoszinuleg a laposfoldesek, chemtrailesek es holdraszallasos idiotak is atlepi. A 9 alkotmanybiro kozul a legujabb - az elso neger no - nem tudja mi az, hogy no. Hulyek mindenhol vannak.

A strange game. The only winning move is not to play. How about a nice game of chess?

Itt most saját magadra gondoltál, ugye? Merthogy én konkrétan egy felmérést linkeltem (...)

Nem, te konkrétan ezt állítottad:

Mint amikor például Trump azt hangoztatta, hogy Covid ellen igyanak hipót az emberek?

Én rávilágítottam, hogy ez kamu, bekajált propaganda.

Na akkor mégegyszer: az amerikai lakosság 4%-a úgy értelmezte, hogy hipót kell inni. Ez TÉNY.

Közvélemény-kutatás = TÉNY. Oké. Amúgy az általad linkelt cikk szó szerint legelső mondata ez: „Bad survey respondents could be skewing results and fueling misinformation.

Négy éve 81283501 amerikai, a szavazók 51,3%-a elhitte, hogy a Biden laptop hamisítvány, elhitte, hogy nem egy szivacsos agyú trotty a jelöltje, hogy ez a trotty és  crack-es fia nem kaptak dollármilliókat Ukrajnából, Kínából, Oroszországból.

"The vision of Christ that thou dost see
Is my vision’s greatest enemy."

Sohasem értettem, miért próbálnak független eseményeket összekötni. Az én anyagi helyzetemet nem befolyásolja érdemben más meggazdagodása vagy elszegényedése, így egészen biztosan nem az alakítja a pártpreferenciámat, hogy valaki, aki nem én vagyok, hogyan gazdagszik. Irigységgel, mint érzelmi befolyással operálni csak azoknál lehet, akik nem fogják fel, hogy neki akkor sem lesz jobb, ha a szomszéd tehene megdöglik.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Egy példát hoztam, hidd el hogy ellenzéki oldalon ez sokakat érdekel, csakúgy mint republikánus oldalon Biden szenilitása és a drogos fia.

Viszont amivel érvelsz szerintem nem áll meg, a példádban a szomszéd döglött tehene azok a bezárt vasútvonalak és posták, a budipapír a kórházból és a fenyegetések hatására piaci ár negyedéért tulajdonost váltott cégek.

Ez igaz, de itt a problema az, hogy a orszag osszes lakosanak karara gazdagszik egy szuk reteg. Vagyis de, befolyasolja a te anyagi helyzeted is, amikor a kozszolgaltatokbol szedik ki a penzt, es nem kapod meg, amiert fizetsz. Rosszabb utak, tobb hajlektalan/szegeny ember az utcakon, dragabb internet, maganorvos, es meg hosszan sorolhatnam: ez mind-mind erint szemelyesen teged is, szegenyebb lettel miatta.

 

(ps: mielott rakerdeznel: a tobb szegeny ember lelkileg tesz szegenyebbe, latvan, hogy milyen sok embernek nincs annyi az asztalan, mint neked. legalabbis aki nem teljesen szociopata, azt a masik szenvedese, nelkulozese nem hagyja hidegen.)

ahogy kinez a dolog, sajnos nem all meg a kormanyzat alatt az a kapzsi reteg, hanem teljesen osszefonodott vele. nezd csak meg, ahogy a kozbeszerzesek, a hirtelen kihozott salatatorvenyek, az allami akviziciok mind-mind erre utalnak.

en talan furamod azert tamogatom a kormanyvaltast, hogy ez az osszefonodas elvagodjon, a kozelet megtisztuljon. Ha a fej cserelodik, eltart egy ideig, amig ujra kiepulnek ezek a szalak.

sajnos pillanatnyilag a korrupcio olyan szintu, ami a gazdasagot, a tarsadalmat, a jovonket kozvetlenul fenyegeti. nem szamit, ki jon helyukre, de ezen a ponton ennek a bagazsnak cserelodnie kell.

Igy vagyok vele en is. Orszagos szinten semmit se szamit 1-1 ugy. Pedofil tamogatas persze rossz, de semmifele hosszu tavu hatasa nem lesz 1-1 ilyen esetnek.

De a gazdasag tonkretetele totalisan dilettans dontesekkel nem csip-csup ugy. Az oktatas szejjelverese nem csip-csup ugy. A koztisztviselok totalis alulfizetese altal okozott tarsadalmi kar nem csip-csup ugy. Es meg hosszu a lista sajnos. Az allam feladataitnak nagy reszet alig-alig latja el, reszben a dilettans/rossz management, reszben a penzhiany miatt.

Ekozben a GDP 5-10%-ara rugo koltesek vannak totalisan mellekes hulyesegekre.

Ez nem csip-csup ugy sajnos, ez a jovonk tonkretetele.

Engem nem erdekel, ki van hatalmon - aki igy vezeti az orszagot, mennie kell, multban is, most is, jovoben is.

Alapvetoen ertenelek is.

De ossze tudsz szedni "GDP 5%-anyi" felesleges koltest? Az az egy valahogy soknak hangzik. Azt ennel is jobban erezne az orszag.

Foleg, ha nem szamolunk olyan dolgokat, amin kesobb profit lehet, ami visszahozza (telekommunikacios szolgaltatok felvasarlasa egy jo pelda erre).

Úgy emlékszem, 2010 előtt rosszabb volt a helyzet. Otthonról, részinformációk birtokában valóban minden választópolgár pénzügyminiszternek képzeli magát, aki tudja a nyerő megoldást.

a gazdasag tonkretetele totalisan dilettans dontesekkel

Fura ez a tönkretett gazdaság. Mitől működik még, ha oly annyira tönkre van téve? 2010-ben nekünk jobb állapotban kellett lennünk, mint Németország, ha az azóta történő tönkretétel hatására még mindig nem lett államcsőd. Viszont, ha így volt, 2010-et, és azt követően miért nem az ellenzék nyerte?

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Ennél kicsit bonyolultabb (és szomorúbb) a helyzet.

Az egész alapja egy bizonyos MMS (https://en.wikipedia.org/wiki/Miracle_Mineral_Supplement) nevezetű csodaszer. Amiről már jóval a covid előtt is terjesztették a konteót, hogy mindent IS meggyógyít a HIV-től a rákon át a megfázásig. (majd elfelejtettem: az autizmust IS :D ) Lényegében egy egyszerű méreg (klór-dioxid). Nem pont a hypó (nátrium hipoklorid), de ahhoz eléggé hasonló tulajdonságú ipari fertőtlenítő- és fehérítőszer. Kis mennyiségben hányást, hasmenést produkál, nagyobb mennyiségben nyilván bele is lehet halni. Valószínűleg a "purgáló" hatása miatt hisznek benne, hogy a betegséget "kiűzi" a szervezetből.

Nyilván a covid alkalmából újra népszerűsíteni kezdték és felkapta a QAnon is. Innentől kezdve nem olyan nehéz rájönni, hogy került ez Trumppal kapcsolatba. Könnyen elképzelhető, hogy Trump részéről ez nem egy véletlen "rosszul fogalmazás", hanem szándékosan a QAnon-osokat támogató, velük "összekacsintó" nyilatkozat volt.

Régóta vágyok én, az androidok mezonkincsére már!

Azért azt hinném, hogy az NSA-nél azért vannak, akik jobban értenek a számítógéphez, mint egy véletlenszerűen választott panel 8-dik emeletén (mondjuk elég kevés panel ilyen magas eleve). Ennek a hivatalnak a góréja az NSA-től jött.

És valószínűleg még igazuk is van, bőven nagyobb igény van ma programozásra, mint amennyit olyan programozókkal tudsz megíratni, akik értik, hogy hogyan kell korrekt memóriakezelést csinálni C++-ban (vagy pláne C-ben) és még érdekli is őket ("lefordul, lefut, átvették, kifizették, akkor jó").

És valószínűleg még igazuk is van

A gond ezzel csak az, hogy hiába térsz át másik nyelvre, attól még nem fog megoldódni a probléma, ti. hogy szar egy program memóriakezelése. A GC sem megoldás, csupán csak tűzoltás.

Semmilyen programozási nyelv sem képes pótolni a programozói tudás hiányát. Pont. Aki mást állít, az vagy hülye hozzá, vagy lobbisták beszéltetik, vagy csak felült az épp aktuális hype vonatra.

Ennek a hivatalnak a góréja az NSA-től jött.

Komoly hozzáértő szakember sosem mondana ilyent. Az NSA-nél is a vezetők segghülyék a dolgokhoz, akárcsak bármelyik másik cég vagy hivatal vezetősége. Lásd Chief Executive (viccnek szánták, de sajnos tapasztalatból tudom, hogy nem az).

Azért nem mindegy, hogy a memóriamanagement hiánya és a pointerekkel dobálózás eredménye egy jó kis buffer túlírás, vagy csak eléri az appod a számára engedélyezett maxot és az operendszer kipenderíti. Az elsőből simán lehet távoli kódfuttatás, a másodikból max DoS. Ráadásul a C-ben nem a memóriamanagement az egyetlen, amire oda kell figyelni, hanem a library is hemzseg az olyan eszközöktől, amik csak várnak rá, hogy jól lábon lődd magad vele (limitek nélküli beolvasás előre lefoglalt helyre).

Valóban egy nyelv sem pótolja a programozói tudás hiányát, de esetekben kicsit elfedi. Máskor megváltoztatja a következményeket, nem egy lyukacsos program lesz az eredmény, hanem egy lassú, de legalább biztonságos.

Nem azt mondom, hogy a C vagy a C++ rossz nyelv lenne, de nem feltétlen kezdőknek való, és nem feltétlen arra, hogy gyorsan összedobj valamit, ahol az számít, hogy mikor lesz kész, de gépidő igénye nincs az egésznek. A reggelihez a kenyeret is okkal nem láncfűrésszel vágjuk.

Az meg már egy további érdekesség, hogy mintha nem is az lett volna a doksiban, hogy "C/C++ baaad, Javascipt goood", csak annyit értett belőle a HWSW-nél a ChatGPT helyett rendszeresített kolléga.

Na de itt kifejezetten kritikus rendszerekről van szó! Azt még véletlenül sem kezdők dobják össze gyorsba'... Vagy ha igen, akkor tényleg nagyon nagy már a baj!

Egyébként nem értem, mi ez a nagy hűhó a buffer overflow kapcsán. Tök könnyedén kezelhető, évtizedek óta bejáratott, automatizált ellenőrzési módszerek vannak rá (pl. valgrind), de a legtöbb C fordító képes magától belefordítani a futás idejű buffer overflow ellenőrzést a kódba (lásd ASAN, és ezt nemcsak a "mainstream" fordítók tudják, hanem még a TCC is pl., igaz, ott "bound check" ugyanennek a fícsörnek a neve, nem "buffer overflow check", de csak a név más.)

Ez nem valós érv a C (vagy épp bármelyik másik nyelv) ellen / mellett. Azaz tipikus marketing bullshit, ami a technikai ellenőrzésen elvérzik.

Szerintem simán az a valós érv, hogy több dologra kell odafigyelni, ott van a lehetőség elrontani a bufferméretet, olvasást bele. Okés, fordíthatsz bele valami bounds check-et, de akkor is kilőtted egy rétegét egy védelemnek. Már csak még egy valaki kell, aki kihagyja az opciót a makefile-ból (kicsit bonyi volt, egyszerűsítette, és kidobálja amit nem ért, pl. a "felesleges" compiler opciókat). Ráadásul még kicsi is a library, szóval vagy folyton újrafeltalálják a melegvizet, vagy a standard C library-nál sokkal kevésbé ellenőrzött 3rd party, vagy még rosszabb, saját libraryket használnak egy csomó mindenre. Van teljesítménykritikus dolog, amit érdemes ebben írni, de szerintem egy csomó mindent nem.

Szerintem simán az a valós érv, hogy több dologra kell odafigyelni,

Ez konkrétan nem igaz, ilyent csak olyasvalaki állíthat, aki nem tudja, miről beszél. Rust esetében SOKKAL több mindenre kell odafigyelni (unsafe, borrow, nem használhatsz duplán láncolt listákat stb), ráadásul mivel nincs GC-je, a memóriafelszabadítást sem úszod meg vele!

Okés, fordíthatsz bele valami bounds check-et, de akkor is kilőtted egy rétegét egy védelemnek.

Mégis miért lőttem volna ki a "védelem egy rétegét" azzal, hogy memóriabiztonságot ellenőrző plusz kódot rakatok a fordítóval bele? Ennek a kijelentésednek semmi értelme.

ott van a lehetőség elrontani a bufferméretet, olvasást bele.

Nem, nincs lehetőség. A bounds check által generált plusz kód nem fogja hagyni, pont ez a lényege!

És különben is, egy normális fordítókörnyezetben a tesztelés során mind azonnal kibukik az összes ilyen. Továbbra is átsiklasz afelett, hogy ezekre évtizedek óta bejáratott automatizált ellenőrzések vannak, amik kiszűrik az összes ilyent. Olvass valgrind doksit, meglátod. (Azzal meg ne gyere, hogy egy rendszerkritikus programnál nincs tesztelés!)

Na de itt kifejezetten kritikus rendszerekről van szó! Azt még véletlenül sem kezdők dobják össze gyorsba'... Vagy ha igen, akkor tényleg nagyon nagy már a baj!

Mi a kritikus rendszer? Teszem azt, ha egyszerre leallna a online rendeles 90%-a, az kritikus lenne? Szigoruan veve nem, de igen komoly kovetkezmenyei lennenek. Pl. ehezne nehany rendelt kajara szokott ember, nem lenne olcso cipo a gyereknek, stb...

Ha eleg sokan hasznalnak egy rendszert, akarmennyire primitiv, a puszta tomegenel fogva kritikussa valik sajnos.

> ASAN, bound check

Ne nevettess, ezek segítenek, hogy az egyszerű esetek általában jól működjenek. Sehol nincs ahhoz képest, hogy a rendszer garantálja, hogy soha egyetlen memória túlcímzés sem lesz. Egyáltalán nem hűhó, hanem konkrétan rohadt nagy meló bizonyítottan tisztességesen csinálni a memóriaelérés ellenőrzését, és ha rigorózusan jól csinálod, akkor a végén lényegében olyat csinálsz kézzel, mint amit a magasabbszintű nyelv megcsinál automatikusan.

Szerkesztve: 2024. 03. 01., p – 12:17

Magyarra fordítva: Amerikai nagyvállalatok részére az alábbi programozási nyelvek használata ajánlott.... mert, backdoort beépíteni sokkal könnyebb és gyorsabban megy, mint C/C++ használata esetén. A RUst ilyen formán talán azért lóg ki a sorból, mert még kevésbé ismert. Egyébként ha komolyan gondolták, akkor C-ben lehet írni biztonságos kódot, csak oda kell figyelni. Ahhoz meg programozó kell, ami manapság már ritka mint a holló.

- Indítsd újra a gépet! - Az egészet? - Nem, a felét...

Azért, mert ott a JIT compiler vagy a bytecodevm plusz támadási felületet biztosít, ráadásul olyant, amivel tetszőleges program támadható. (Egy egyszerű, kézenfekvő példa: keylogger a JVM-ben, ami bármilyen program billentyűleütéseit képes ellopni a program előzetes ismerete vagy épp módosítása nélkül is. De van még több példa bőven.)

Na de ahhoz fordítási környezetet kell kompromittálni, nem pedig a futási környezetet! Ég és föld. Egy normális rendszerkritikus alkalmazást futtató szerveren nincs is gcc feltelepítve, ellenben a JVM-et nem úszod meg Java esetén.

A programnyelv sajátosságai kapcsán meg az class inheritance miatt lehet könnyedén beinjektálni egy malware-t tartalmazó virtuális metódust. C alatt ilyen nincs (a shared lib-eket ott is meg lehet fertőzni, de nem erre gondoltam, mert azokat támadni programnyelvfüggetlen támadási felület. Itt most kifejezetten arra utaltam, amikor egy Java-s middleware class-ba kerül turpisság, ami az alkalmazással együtt érkezik, és nem az OS biztosítja).

Miután jól kizsörtölődtük magunkat, meg jól kiröhögtük a hülyeamerikaikat, ideje hogy kicsit korrigáljuk a cikket. Mert ez a megint bulvárújságírás netovábbja.

Az egész dokumentum nekem inkább egy ilyen executive overview-nak, összefoglaló jelentésnek tűnik a jelenkor jellemző szoftverbiztonsági kihívásairól, nem valami kötelező erejű vagy akárcsak erősen ajánlott, előíró jellegű ajánlásnak.

Az eredeti szövegben a C és C++ összesen két helyen szerepel. Az is hivatkozásként két másik dokumentumra. Az egész bekezdés általában a memory safety problémák alátámasztására idézi be:

"Experts have identified a few programming languages that both lack traits associated with memory safety and also have high proliferation across critical systems, such as C and C++.iv Choosing to use memory safe programming languages at the outset, as recommended by the Cybersecurity and Infrastructure Security Agency’s (CISA) Open-Source Software Security Roadmap is one example of developing software in a secure-by-design manner."

A két idézett forrás:

"iv See id. See also Introduction to Memory Unsafety for VPs of Engineering · Alex Gaynor, August 2019, available here.
v See CISA Open Source Software Security Roadmap, Department of Homeland Security, Cybersecurity Infrastructure and Security Agency September 2023, available here."

A második hely ahol előkerül kifejezetten az űrtechnikáról szól:

"According to experts, both memory safe and memory unsafe programming languages meet these requirements. At this time, the most widely used languages that meet all three properties are C and C++, which are not memory safe programming languages. Rust, one example of a memory safe programming language, has the three requisite properties above, but has not yet been proven in space systems."

És mit mond? Azt, hogy a Rust ugyan lehetne egy alternatíva, de jelenleg még nem bizonyított ebben a környezetben.

Nézzük mit mond a jelentés Java-ról, ez egyetlen helyen fordul elő a szövegben:

"In December 2021, the discovery of a vulnerability within Log4j, a ubiquitous open-source Java logging library, highlighted a critical weakness through which malicious actors could compromise computer systems across the world.xxxiv "

Hát ez pont nem az a kontextus, amiben a HWSW-s bulvárcikk említi...

Nézzük mint mond a Javascriptről és a C#-ról:

Semmit. Nincsenek megemlítve a jelentésben.

Szóval nem tudom a kedves HWSW-s újságíró (ha lehet ennek nevezni) honnan költötte hozzá ezeket, mert az eredeti kiadott dokumentumban ezek az állítások egyszerűen nincsenek benne.

Régóta vágyok én, az androidok mezonkincsére már!

Ilyen konnyen odaadni Oroszorszagnak es Kinanak a hideghaboru gyozelmet... mert ez a nyilatkozat semmi masra nem jo.

Inkabb segitek gondolkodni:

  • Szerinted milyen intenzitassal tanitanak C-t es C++-t ma pekingi, shanghai, moszkvai, stb. egyetemeken?
  • Szerinted miben irtak tobb nyilt forraskodu OS-t az elmult evtizedekben? Es mive tudjak a nem nyilt forrasu projekteket leghatekonyabban ma "disassemble"-ni?
  • Mely nyelvek forditoit optimalizalta 3 generacio 40 even at?
  • Gondolom van egy elkepzelesed, hogy USA, UK stb. egyetemeken 8-16-32G RAM es 10th gen core i3-i5-i7 vagy M1-M2-M3 van. El bennunk olyan kep is, hogy talan Moszkvaban es Pekingben nem telik minden diaknak ilyenre (tegyuk fel, hogy ez a kep nem teves). Ezesetben mi lesz gyors a kevesbe szerencses diakok szamara, amit nem C-ben vagy C++-ban irtak?
  • Miben irtak szoftvert, amikor volt ido "mernoki gondolkodasra" es felfuto ag volt a szoftverfejlesztes? Vs miben irnak ma, mikor "tobb netezo mar nem nagyon lesz" es minden felhasznalo egy fejostehen? Ennek kovetkezteben melyik lesz jobb minosegu kod? Amit melyik nyelven is irtak?
  • Milyen nyelven irtak szoftvereket, amikor a programozo human eroforras meg csak a minimalber 2-3x-osaba kerult, nem 6-7x-esebe, es meg volt oka felteni a munkajat, megelheteset - netan emiatt meg teljesitett es bizonyitott is?
  • Milyen nyelven kodoltak, amikor a kepzes meg kepzes volt, nem kepzesipar es cert-jerking?
  • Milyen nyelven kodoltak, amikor a lakossag 8%-a kerult be egyetemre, nem 40-50%-a?
  • Mikor volt kevesbe elagazva a tudomanyag? Amikor majdnem mindenki C-zett, vagy most, hogy mar 100 nyelvet kene vagni piackepesseghez?

Ha ezeken nem gondolkodsz el, az nem az en bajom. De remelem tudsz ilyen kiindulopontokat is figyelembe veve is gondolkodni. En nem fogok meggyozni senkit.

Csomoan alamvalaszolnak majd, egyetlen reszallitast megtamadva, es azt hiszik majd, hogy azzal az egesz listamat teljesen invalidaltak.

Megbocsajtani nekik valoban nincs okod. Viszont annak utananeznek alaposabban, hogy mit csinal a haborus helyzet a technikai fejlodessel, es annak iranyaival es annak titkossagaval/nyilvanossagaval.

Drukkolhatsz annak, hogy majd 2026-ban az ukran elektron+js alapu szoftverrel rohangalo dronok 16G RAM-mal elverjek az 1G ram alatti huawei chipes C/C++-os firmware-es dronokat. De felhivnam a figyelmed, hogy a drukkolas ellenere van mit felmerni realisan. Mint C-hez erto fejleszto, tenyleg tovabb kene latnod egy sima drukkolasnal, amikor eselyeket mersz.

Nem hiszem, hogy alapos kutatast vegeztel azzal kapcsolatban, hogy milyen kepzesek mennek ma orosz egyetemeken (vs 3 evvel ezelott), es milyen minosegben. Sot, ezzel kapcsolatban valos, objektiv informaciohoz nem nagyon lehet hozzaferni.

De az ugye megvan, hogy egy HWSW-s fake newsnak ültetek fel? Az egész vita alapja hamis. A fehérházi jelentés semmi olyasmit nem tartalmaz, hogy le kéne cserélni a C/C++-t, ezt az egész marhaságot Javascriptről, meg C#-ról a HWSW cikkírója halucinálta oda.

Régóta vágyok én, az androidok mezonkincsére már!

Viszont annak utananeznek alaposabban, hogy mit csinal a haborus helyzet a technikai fejlodessel

Hogy mit csinál vele? Menekül az összes programozó Oroszországból, és velük együtt a know-how is odavész, azt csinálja.
De itt a HUP-on is ki lett már tárgyalva, hogy padlót fogott az orosz IT szektor.

a tudás egy lassan párolgó anyag.

Francokat. Az emberekkel együtt a tudás is elmenekül, és nagyon gyorsan elillan. El nem párolog ugyan, csak átcsoportosul másik országba.

hogy hogyan jött ide

Az elmenekült értelmiség pótlására szánt tananyag minőségének demonstrálása végett. Magyarul: a mostani oktatás színvonala nem képes pótolni a már elszenvedett veszteséget egyhamar.

Én nem tagadom az állításaidat (inkább szuggesztív kérdéseidet). De őszintén mondom hogy nem értem a logikádat. Ha egyszer volt valami, akkor annak örökre így kell maradnia? Ez a technikai fejlődés megcáfolása. Ha már ettől várod a hidegháborús győzelmet: nem pont annak van nagyobb esélye – már csak a sima evolúciós mintát követve is – aki tud fejlődni, alkalmazkodni a kor kihívásaihoz és lehetőségeihez?

Maskepp fogalmazok: a 90-es es 2000-es evekbeli nyugati technika ellopasaval es minimalis tovabbgondolasaval az oroszoknak es a kinaiaknak kinosan sok eselyuk van a 2020-as evekbeli nyugati technologia ellen.

Ebben benne van az is, hogy a 90-es es 2000-es evek tech-jenek ertelmi szerzoje a Nyugat. Es az is, hogy hiba ezeket a mukodo dolgokat kukaba dobni, es kinos, hogy erre az ertelmi szerzo Nyugat ellensegenek van nagyobb eselye rajonni.

Eszembe nem jutna a kivezetést úgy gondolni, hogy dobjuk el az összes, eddig megírt C kódot. Én max úgy értelmezném, hogy új projektek esetében gondoljuk meg, hogy ezt tényleg kell-e C-ben, és esetleg régebbi projektek esetében kezdjük el az új és a refaktorált részeket nem C-ben írni. De nem mindenhol, hanem ott, ami nem hasonlít arra, amire a C-t kitalálták.

A C++ pedig egy egészen más tészta, abban lehet olyan kódolási szabályokkal dolgozni, hogy ne legyen lényegesen kockázatosabb a dolog, mint mondjuk a Java. Ott a baj inkább az, hogy egy hatalmas, bonyolult nyelv, amiben van minden, az imperatívtól az objektumorientálton át a funkcionálisig, szóval ha többen dolgoznak együtt, akkor azért eléggé meg kell beszélni, hogy milyen stílust akartok, azt ellenőrizni, és olyanokkal dolgozni, akik tényleg értik.

 

Még egy visszakérdezés: okés, nincs COBOL alapú OS. De hány OS közül lehetett eddig választani, azok hány különböző nyelvben voltak (asm, PL/1, PL/C, C, C++, ...)? COBOL-ban nagyon sok olyan van (pláne volt), ami egy adott cégnek készült, egy olyan rendszer létezik, abból kellett választani, és nem az IT biztonság volt az elsődleges szempont (fizikailag nem fér hozzá külső ember), hanem az, hogy tudja a specifikációt (adott törvény, vállalati előírás legyen belekódolva).

Szerintem a C és a JavaScript annak a költői képe, hogy a programozónak van-e fogalma arról, hogy mi történik a gépben. És azzal egyetértek, hogy az erősebb, jobb, nagyobb gép nem segít abban, hogy értse is a nebuló, hogy mi van benne. Nem zárja ki, de egyáltalán nem szükséges. Ezért is fogom a fejem, amikor az iskolákba méregdrága gépeket vesznek, és ettől várják, hogy majd a gyerekek okosabbak lesznek: egy Linux+gcc parancssorban pont elég kellene, hogy legyen ahhoz, hogy megtanítsuk az informatika alapjait. De a DOS+Turbo Pascal és hasonlóan alkalmas volt, csak oda már nem éri meg visszamenni ma. És akkor méregrdága vasakkal meg MS szoftverekkel szerelik fel a laborokat "állami pénzen" tehát mindenki más pénzén.

Például fegyverek fejlesztéséhez elengedhetetlen a mikrovezérlők, real-time rendszerek ismerete. De ennek az alapjaihoz egy 1dolláros AVR csip pont elég, vagy akár szimulátorban egy bármilyen PC-n is meg lehet tanítani. Nem az anyagi lehetőségeken múlik, mert a minimum szint annyira olcsó lett, több meg nem kell.

Az a kérdés szerintem, hogy mit akarsz elérni. Ha azt, hogy viszonylag hamar tudjon valamit csinálni, amiről úgy érzi, hogy "ejha, de király, és én írtam", arra jobb szerintem kicsit absztrahálni, és nem a gépközeli dolgokkal kezdeni. Ne legyen túl nehéz, és legyen látszatja, az motivál. A technika órán sem kezded azzal, hogy odaadod vödörben egy 21 köves svájci óra darabjait, hogy na, rakjuk össze, hanem a fémépítő kiskocsival.

Fene tudja. Nekem az első élményeim BASIC-kel voltak, de igazán a Z80 assembly volt az a nyelv, amit kellő izgalommal tettem magamévá. (Amilyen időket élünk, lehet, hogy már ez is büntetendő. ;) ) Sokkal érdekesebb volt nekem a BASIC-nél az, hogy az egyes CPU utasítások milyen flag-eket állítanak, vagy az, hogyan célszerű 16 bites regisztert nullára vizsgálni - ugye az alsó és felső byte-jának logikai VAGY kapcsolatával. Annál pedig nincs lejjebb, nincs hardware-közelibb élmény, legfeljebb a forrasztópáka. :) Írtam mind a négy irányba scrollozó rutint, s mivel nem volt kernel, fegyelmezettnek kellett lenni, mert ha hibát vétettem, megfagyott a gép, s mindent lehetett elölről kezdeni. Meg aztán sok mást is írtam assembly-ben, lényegében ezáltal tanultam meg a szakmát.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Más kor volt. Nálunk is volt ZX Spectrum, akkor tényleg az volt a lenyűgöző, hogy egyáltalán van computer, és működik. Nem kellett ehhez valami csillogó-villogó cucc. Ma viszont körülveszik az embert a különböző IT cuccok, a saját programnak nem szabad azok mellett gagyin kinéznie (akkor sem, ha tudod, hogy megértetted hozzá az utasítások végrehajtásához szükséges ciklusok számát). Neked a szkrollozó rutin volt a meghatározó élmény, de ez egyéni. Engem eléggé hidegen hagyott akkoriban a dolog, aztán amikor magasabb szintű nyelvben írtam differenciálegyenlet-megoldót, hogy ellenőrizzem, hogy mennyire jó egy közelítő formula, és a kettő 8-10 jegyre egyezett, az nyűgözött le.

>A technika órán sem kezded azzal, hogy odaadod vödörben egy 21 köves svájci óra darabjait, hogy na, rakjuk össze, hanem a fémépítő kiskocsival.

Ez igaz, de ha belegondolsz, a fémépítő - ASM,C <-> svájci óra - JavaScript hasonlat is működik :-)

A bonyololutságról meg annyit, hogy egy AVR core-on az adatlapra konkrétan le van írva, hogy melyik utasítás mikor hány órajel alatt fut le. Aztán meg lehet nézni szkópon, és tényleg annyi. Jól definiált, mérhető, látható, tehát érthető. Egy mai PC-n futó JavaScripttel ezt nem tudod leutánozni, a futásídő egy absztrakt valamivé válik. És ezért nehezebb megtanítani.

"Ez igaz, de ha belegondolsz, a fémépítő - ASM,C <-> svájci óra - JavaScript hasonlat is működik :-)"

Más szempontból működhet a hasonlat, de itt elég egyértelműen leírtam a szempontot, az, hogy hamar legyen sikerélmény. Az óra összerakásával nem lesz. Ugyanúgy nem lesz sikerélmény az ASM-mel sem a nagy többségnek, eleve túl sok ideig kell odafigyelni és azt csinálni, mire egy valami működni fog.

A futásidő pedig egy gráfokkal kapcsolatos vagy rendező-algoritmusban ugyanolyan szépen megszámolható, mint az ASM-ben, csak nem olyat kérdezek, ami teljesen függ a CPU-architektúrától (hány órajelciklus a MOV), hanem olyat, ami az architektúrától független (hány párcsere egy bubble sort).

Az én meglátásom az, hogy el kell különülnie a szakágaknak. Van akinek az lesz a specialitása, hogy a low-level dolgokhoz ért és van aki meg mondjuk valami bonyolult probléma matekjához ért és azt akarja, hogy a programnyelv/fordítókörnyezet/runtime/engine megoldja neki anélkül, hogy foglalkoznia kellene azzal, hogy mi folyik alacsony szinten. Ezzel szerintem nincs akkora baj.

Azt a trendet problémásnak látom én is, hogy bizonyos feladatokat amikre korábban volt hatékony, jól működő megoldás (pl. vastagkliens GUI-k), ma már szinte mindenki beágyazott browseren futó html+css+javascript kombóval próbálja megoldani. Azt is problémásnak látom, hogy hihetetlenül népszerűek lettek a hatékonytalanul futó, interpretált, egyszálas GIL-es scriptnyelvek mindenféle teljesítménykritikus szerver oldali alkalmazásban. (Aztán lehet küzdeni, hogy deploy-old container clusterekbe 100 példányban, meg hogy lehetne mégis többszálúsítani a python-t stb.)

A DOS, Turbo Pascal, Turbo C stb. világhoz azért sem kéne visszatérni, mert ott rengeteg dolgot az határozott meg, hogy a PC architektúra kialakításakor milyen buta, mondjuk úgy nem jövőbiztos hackeket tervezési döntéseket hoztak, amiket utána kompatibilitás miatt évtizedekig hurcolt az egész PC-s világ magával. Szerintem a near meg far pointereket szerintem nem kívánja vissza senki, a VGA bank switching-et sem és ez még csak a jéghegy csúcsa. :) És sok más régi dologgal is ez a baj. A low-level világban is vannak bőven jobb, technikailag okafogyott örökölt limitációktól már mentes megoldások.

Régóta vágyok én, az androidok mezonkincsére már!

Azt a trendet problémásnak látom én is, hogy bizonyos feladatokat amikre korábban volt hatékony, jól működő megoldás (pl. vastagkliens GUI-k), ma már szinte mindenki beágyazott browseren futó html+css+javascript kombóval próbálja megoldani.

Nagyon egyszerű az oka: ahogy az első mondatodban írtad is, elkülönülnek a szaktudások. A GUI fejlesztés egy specialitás lett, a neki megfelelő szakosodással, a web pedig egy olyan crossplatform GUI megoldás, ahol ahhoz, hogy Windowsra, Linuxra, macOS-re, Androidra, iOS-re felhasználói felületet csinálj, nem kell megtanulnod ezerféle programnyelvet, környezetet.

Urambocsá, smart displayek esetén is, egyszerűbb kitenni egy HTML alapú dashboardot (akár a gyárba, akár a meeting roomba), mint egy specliális GUI-t.

A HTML lett az univerzális felhasználói felület építő eszköz, ennyi történt - specializálódott a szakma.

Bizonyos mértékig igen. De szerintem nem volt szükségszerű, hogy pont ebbe fulladjon bele ez a szakterület. Volt kismillió többplatformos toolkit, ami le tudott fordulni az összes támogatandó oprendszerre. Natívan, mindenféle interpreter, runtime meg egyebek nélkül.

Ráadásul a web frontend minden csak nem egységes, meg univerzális, minden évben 10+ új frameworkkel, meg ki tudja hányféle javascript-re transcompile-oló nyelvvel. Van ahol már több rétegben, egyik script először template-el a másik nyelvre, ami utána fordul javascriptre. stb.

Ebben szerintem leginkább a walled-gardent építő nagy platformok, elsősorban az Apple volt a sáros (a Google meg szépen követte 1-2 évvel), akik erősen tolták a fejlesztőket abba az irányba, hogy úgy csináljanak app-ot, hogy valójában egy weboldalt csomagolnak be.

Régóta vágyok én, az androidok mezonkincsére már!

Ráadásul a web frontend minden csak nem egységes, meg univerzális, minden évben 10+ új frameworkkel, meg ki tudja hányféle javascript-re transcompile-oló nyelvvel. Van ahol már több rétegben, egyik script először template-el a másik nyelvre, ami utána fordul javascriptre. stb.

Ez tök lényegtelen abból a szempontból, hogy a végén HTML, CSS, JS és képek lesznek, mert a browser ezt értelmezi. És kb. ma már egy hűtőben is van browser engine, egy tévében meg biztosan. Melyik az egyszerűbb, ha a feladat írni egy olyan programot, aminek van GUI-ja? Azt mondod a cégnek, hogy "kell egy böngésző" (amit amúgy is használ minden másra), vagy azt, hogy "na, akkor telepíteni kéne az XYZ framework DLL-jeinek a pontos A.B.C. verzióját, mert te ehhez értesz csak". És itt el is bukik a dolog, böngésző mindenhol van, míg bevinni egy újabb technológiát a legtöbb cégnél plusz biztonsági kockázat, plusz üzemeltetési feladat, plusz licencelési feladat stb.

 

akik erősen tolták a fejlesztőket abba az irányba, hogy úgy csináljanak app-ot, hogy valójában egy weboldalt csomagolnak be.

Ez nem a walled garden miatt volt, hanem egész egyszerűen azért, mert ha valamit megcsinálsz böngészőre jól, akkor az menni fog mobilon is jól, becsomagolod , és kész a letölthető app az áruházból. Dolgoztam ilyen alkalmazások (egy nagy svájci bank mobilappja), ment böngészőből és ugyanazt az élményt adta Androidon és iOS-en (sőt, az elején még Windows Phone-on is). Mert a hatalmas közös kódbázison kívül pár platformspecifikus plugint kellett karbantartani (amire akkor még nem volt WebAPI - ma már megoldható az egész anélkül, 0 natív kóddal).

Arra általában nincs pénz, hogy fejlessz külön appot natív technológiákkal iOS-re, Androidra, desktopra, mert ehhez háromszor annyi fejlesztőt kellene fizetned - az igazán nagyokon kívül senkinek nincs erre pénze, főleg akkor nem, amikor maga az alkalmazás önmagában nem termel pénzt (lásd banki mobilapp), de ha nincs, akkor versenyhátrányba kerülsz.

És kb. ma már egy hűtőben is van browser engine, egy tévében meg biztosan.

Ezt én pont rossz példának akartam hozni, csak már nem akartam erre is kitérni. Nézz meg egy olyan beágyazott rendszert, amire a gyártó már nem ad ki rendszeres frissítéseket. Próbáld használni a böngészőt mondjuk egy LG WebOS-es tv-n, ami már kifutott a support periódusból. Elég látványosan törnek szanaszéjjel a weboldalak rajta... Másrészt használhatatlanul lassúak is. Eleve amikor kijöttek is éppencsak elég volt a CPU teljesítményük az akkori oldalakhoz, de mára egy korszerűbb oldal betöltődése kivárhatatlan rajta. Percekig nézed az akadozó placeholder (skeleton vagy hogy hívják ezeket) animációt, szerintem az eszi el a CPU időt, a tényleges betöltődés meg nem halad. Azóta, hogy a Google teljesen átvette az uralmat az egész platform felett, és rolling jelleggel kedve-szerint adja hozzá a feature-öket, csak addig van platformod, amíg minden egyszerre a lehető legfrissebben van tartva.

Hasonlóképpen a frontendes kollégáim néha mutogatják nekem a szörnyűségeket, mikor egyik ecmascript verzióról kell másikra fordítani, mert bizonyos böngészőkkel kompatibilitás miatt az még kell. Tsx-ből lesz ts, a ts-ből fordul js, a js még átmegy valami Babel, vagy hasonlón, ami csinál belőle még archaikusabb js-t. És az egészet minify-olják a végén, hogy mégse egy 15MB-os js-t kelljen letölteni. Ha valamivel hiba van, akkor sok szerecsét a debuggoláshoz. Értem mit akarsz mondani, nyilván ha engem kérdeznének, hogy mondjam el a webes platform előnyeit, akkor valami hasonlót mondanék. Csak a gyakorlatban nem olyan szép a történet. Nem szebb, mint a natív UI frameworkök esetén, csak máshogy csúnya.

A te példád, amit írsz sok szempontból pont arra példa, ahol kérdéses, hogy mi az app hozzáadott értéke egy weboldalhoz képest. Amire én gondoltam a walled-gardenekkel az pont az, hogy 1-2 jogot csak akkor kapsz meg (pl notification kezelés), ha app vagy.

Régóta vágyok én, az androidok mezonkincsére már!

Vastagkliens esetén a legnagyobb probléma mindig az upgrade. A (kliens) program lecseréléséhez legtöbbször admin jog kell, ami nem minden usernek adott, de ha igen, akkor is írni kell hozzá egy telepítőt, gondoskodni arról, hogy le is töltődjön, lehetne folytatni, de felesleges, tudod, miről van szó. Böngésző meg mindenhol van, szabványos (legalábbis elvben, és mint tudjuk, az elmélet és a gyakorlat közt nincs különbség - elméletileg), tehát lehet rá számítani, hogy a böngészőkön rendben fut. Persze innentől bejönnek más problémák a rendszerbe, de a jelek szerint jelenleg a webes kliens a leginkább használható megoldás. Még akkor is, ha a használt protokol - lévén sessionless - elég hülye megoldás, de ez van.

Ezt meg éppen mostanában csukdossák befele a W^X policy-kkel. Hogy az alkalmazás ne tudjon admin jog nélkül (és persze az egyre szorosabban záródó app store kikerülésével) frissülni akkor sem, ha csak a html/css/js content változott.

Régóta vágyok én, az androidok mezonkincsére már!

Volt kismillió többplatformos toolkit, ami le tudott fordulni az összes támogatandó oprendszerre. Natívan, mindenféle interpreter, runtime meg egyebek nélkül.

Mondjuk ez még kevés ám, az is kell, hogy ugyanúgy viselkedjen, az a kód, amit megírtál, mindegyik platformon hordozhatóan ugyanúgy viselkedjen, ne kelljen telerakni a kódot platformfüggő kódokkal (mert mindig ez a gond). És a böngésző volt az a platform, amire a legkönnyebb megírni olyan kódot, ami platformfüggetlen. Akár gondolhatunk arra az egyszerű problémára, hogy 32 vs 64 bit, de akár arra is, hogy AIX vs BSD vs Linux vs macOS vs Windows, meg arra is, hogy ARM vs X64.

Az olyanokról meg ne is beszéljünk, hogy hardvergyorsított rendering, urambocsá multimédia használata, kodekek, stb. Vagy éppen az olyan dolgokat, mint a helyes font rendering mindenféle nem latin írást használó nyelvre.

Nagyon sok multiplatform toolkit ezeket nem tudta, nem tudja - hiába fordul le minden platformra. Az édeskevés, hogy valami lefordul :)

Sokkal-sokkal egyszerűbb megoldás a böngésző, mert ott a vendor megoldja ezeket a problémákat helyetted és nem neked kell vele szívni.

"Az olyanokról meg ne is beszéljünk, hogy hardvergyorsított rendering"

Az egész motivációm, amiért ezt a threadet elkezdtem pont egy ilyen élmény volt. Hogy már egy nyomorult chat alkalmazásnak, amiben csak szövegek vannak egy ablakban _kell_ a GPU gyorsítás, mert különben használhatatlanul lassú. Vagy egy autentikátornak vagy egy credential managernek. Kőegyszerű UI-okról beszélünk, persze trendy design-nal. Utoljára win3.1 korszakban volt jellemző, hogy az ISA buszos grafikus kártyákkal a redraw annyira lassú volt, mint ezeknél, ha éppen nincs GPU gyorsítás.

"És a böngésző volt az a platform, amire a legkönnyebb megírni olyan kódot, ami platformfüggetlen."

És ennek következménye lett, hogy a böngészők (pontosabban fogalmazva a Google, a többiek meg kénytelenek voltak menni utána) elkezdek API-t biztosítani rengeteg olyan rendszerszintű erőforráshoz, amihez biztonsági okokból soha semmilyen körülmények között nem lett volna szabad. Aztán meg lehet rohanni az access controllal az események után... mindig valahogy eső után köpönyeg jelleggel, mikor utólag kiderül, hogy jaj már megint mekkora privacy, meg támadási felület nyílódott valahogy.

Most már tényleg ott tartunk, hogy VM-ben kell futtatnod a böngészőt, hogy valamennyi esélyed legyen kontrollálni, hogy egy weboldal mit csinál a mikrofonoddal, a kameráddal, a környezetedben levő bluetooth és wifi eszközök MAC címeivel stb. (És ezzel jön a szívás a GPU gyorsítással... persze ezt is meg lehet oldani, de mégis...)

Régóta vágyok én, az androidok mezonkincsére már!

És ennek következménye lett, hogy a böngészők (pontosabban fogalmazva a Google, a többiek meg kénytelenek voltak menni utána) elkezdek API-t biztosítani rengeteg olyan rendszerszintű erőforráshoz, amihez biztonsági okokból soha semmilyen körülmények között nem lett volna szabad.

Mi a lényegi különbség aközött, hogy a böngésző hozzáfér és API biztosít rendszererőforrásokhoz, meg aközött, hogy az XYZ random toolkit biztosít hozzáférést ehhez? Ráadásul úgy, hogy a user elindítja az alkalmazást, és az nem is kér engedélyt a usertől, hogy használhat kamerát, USB-t, lokációt stb, míg a böngésző ezt megoldja neked?

Most már tényleg ott tartunk, hogy VM-ben kell futtatnod a böngészőt, hogy valamennyi esélyed legyen kontrollálni, hogy egy weboldal mit csinál a mikrofonoddal, a kameráddal, a környezetedben levő bluetooth és wifi eszközök MAC címeivel stb.

Ez ugyanúgy igaz a natív appokra is - mindegyik megcsinálhat bármit, amit te userként megtehetsz, hiszen a nevedben fut.

Mi a lényegi különbség aközött, hogy a böngésző hozzáfér és API biztosít rendszererőforrásokhoz, meg aközött, hogy az XYZ random toolkit biztosít hozzáférést ehhez? Ráadásul úgy, hogy a user elindítja az alkalmazást, és az nem is kér engedélyt a usertől, hogy használhat kamerát, USB-t, lokációt stb, míg a böngésző ezt megoldja neked?

(Kicsit sidetrack: Egyrészt nem tudom láttál-e manapság MacOS-t. Agyfrászt kapsz, hogy rákattintasz a File/Open-re vagy mégjobb Save-re és jön a "This application wants to access your Documents folder. Go to System Preferences / Security & Privacy / Privacy and enable it, then restart the application.". Ugyanez Downloads folder, Music folder, Photos, Camera, Location Data, User Input Monitoring stb... egyesével. Érdekes, hogy a Safari.app nincs sehol a listában. Mint az Android-on az image-be gyárilag beépített alkalmazások, itt is vannak "egyenlőbbek" a többieknél.)

Másrészt az én logikám itt az volt, hogy a böngésző engine-be elve nem lett volna igény beletenni, ha nincs az a trend, hogy a "natív" alkalmazások is böngészőben fussanak. Ha már egyszer benne van, akkor benne van a weboldalak fele is. Legfeljebb bízol a belső access controlban (amit Pwn2own-on kb minden évben meg szoktak törni), meg a böngésző-vendor jóindulatában, hogy defaultból kikapcsolta ezeket a jogokat és nem neked kell minden egyes browser verzió update után keresgélni a settings menüben, hogy letiltsd az újabb meglepetéseket.

Ez ugyanúgy igaz a natív appokra is - mindegyik megcsinálhat bármit, amit te userként megtehetsz, hiszen a nevedben fut.

Nem akartam erre is külön kitérni, mert kilóg az érvelés fő logikájából. De van egy speciális támadási felület a embedded-böngészős alkalmazásokon, ami a rendes natív appokon nincs. Olyankor látszik, amikor pl az appban valami felhasználói fiókodba akarsz belépni, ami egy nagy közös céges SSO-ba van kötve. Mikor a vastagkliensed ablakában in-place megtörténik a redirect a külső SSO provider login oldalára, akkor tudod, hogy itt nem lett letiltva, hogy külső content is betöltődjön. Nem lehetsz biztos benne, hogy amit látsz az tényleg az alkalmazásod lokális felhasználói felülete, vagy esetleg valami XSS sebezhetőséggel valami külső URL-ről injektálódott bele valami. Itt nincs olyan, hogy megnézem az URL-t, megnézem a certet, ezek mind rejtve vannak előled. Persze tudom, van valami mágikus billentyűkombináció az Electron appokon, amivel előjön a Show Console menüpont, de nyilván normálisan nem a network tab manuális figyelésével fogod észrevenni, hogy valami anomália van.

Régóta vágyok én, az androidok mezonkincsére már!

Olyankor látszik, amikor pl az appban valami felhasználói fiókodba akarsz belépni, ami egy nagy közös céges SSO-ba van kötve. Mikor a vastagkliensed ablakában in-place megtörténik a redirect a külső SSO provider login oldalára, akkor tudod, hogy itt nem lett letiltva, hogy külső content is betöltődjön.

Na és a natív appba ágyazott böngésző esetén ez hogyan van? Nem tudhatod, hogy a natív app mit tölt be, mit csinál a begépelt jelszavaiddal stb. Ugyanúgy meg KELL bíznod a natív appban, mint bármelyik webes appban is, ebben semmi különbség nincs egy natív, egy Electronos meg egy böngészőben futó app között.

Szerintem van különbség.

A natív app esetén össze van fordítva a kód, lényegében egy lokálisan telepített "immutable" (*) csomagod van. A kód és a libek nem cserélődnek ki maguktól, külső forrásból futási időben kód nem jön be. Csak update formájában tud változni. Ennek nyilván megvannak a szokványos tipikus sebezhetőség-fajtái (és ezzel visszakanyarodunk a cikkhez). Erre vannak megfelelő toolok, amivel libekben ismert sebezhetőségeket lehet keresni stb.

A web-alapú appban _ezen felül_ bejön az a lehetőség, hogy valami cross-site scripting vagy cross-origin resource sharing sebezhetőség segítségével (gonoszul megformázott user input, betöltött file stb.) a beágyazott böngésző elkezdjen külső URL-ekből betöltögetni olyan dolgokat, amik sosem voltak részei a csomagnak. A komplett UI-t lecserélheti valami egész másra (ami akár pont ugyanúgy néz ki), anélkül, hogy észrevennéd, hogy már nem a helyi alkalmazásodban, hanem egy távoli weboldalon vagy. Ez extra sebezhetőség-fajta, és valószínűleg nem az egyetlen, amit megörököl a webes világból. Le lehet tiltani? Persze, sokmindent lehet. Kérdés, hogy megteszi-e a vendor. Sok esetben valami legitim use-case (lásd SSO-s példa) miatt nem.

(* Igen, néha előfordultak olyan sebezhetőségek, ahol a helyi alkalmazás runtime-ot is rá lehetett venni, hogy libet töltsön be hálózatról, pl Java-nál volt ilyen JNDI-vel sok évvel ezelőtt. Ez nem egy gyakori sebezhetőség-fajta.)

Régóta vágyok én, az androidok mezonkincsére már!

Szerkesztve: 2024. 03. 01., p – 15:05

Gondolom, az ALGOL, a COBOL meg a FORTRAN memóriabiztos programok. :D

Ahogy fentebb is leírták, nem mindegy hogy a hanyag/dilettáns programozói munkának mi a következménye. Szuboptimálisan futó program, vagy (akár nemzetbiztonsági) adatszivárgás, rosszabb esetben az irányítás átvétele.

Két dolog vezet biztonsági réshez:

  1. Rosszul megtervezett biztonsági mechanizmus (access control): ez nyelvtől független.
  2. Implementációs, leggyakrabban memóriakezelési hiba: ennek lehetőségét a menedzselt nyelvek kizárják.

Én nem látok olyan matematikát, amelyben a menedzselt nyelvek felé való elmozdulás nem egy jó dolog. 1 potenciális hibafaktor mindig jobb lesz, mint 2.

Két dolog vezet biztonsági réshez:

Meg még vagy egy tucat. Futtatható verem, hibás kernel paraméter ellenőrzés, rosszul tervezett rendszer stb. (Utóbbira példa, valós életben kihasznált sebezhetőség, hogy a malware hookolja az ExitBootServices-t, mert a hibás UEFI tervezés eredményeképp ez egyáltalán lehetséges).

Én nem látok olyan matematikát, amelyben a menedzselt nyelvek felé való elmozdulás nem egy jó dolog.

Rendszerkritikus alkalmazások esetén ROSSZ dolog. Nagyon nagyon ROSSZ.

Matematika nincs, van viszont konkrét ellenpélda rá tapasztalatból: mivel a Java GC-s, ezért esélyed sincs szabályozni, mennyi memóriát is foglal éppen a program. Emiatt persze túllépte a megengedett keretet, és az SE szabály kilőtte a rendszerkritikus folyamatot (és ez még a jobbik eset, ami fülöncsíphető a logokból a posztmortem jelentéshez, gondolj bele, mi történt volna, ha nincs SE és az OOM Killer üt be... Tisztára orosz rulett)

A lényeg, hogy éles rendszeren egy rendszerkritikus folyamat leállt, ráadásul kifejezetten a menedzselt nyelv hibájából.

Csak ismételni tudom magam: GC esetén esélyed sincs szabályozni, mennyi memóriát is foglal éppen a program. Nem látsz rá olyan alapvető dolgokra, pl. hogy mikor fut, épp ezért tervezni sem tudsz vele. Rendszerkritikus alkalmazásokra nem való ilyen nyelv.

Itt egyébként konkrétan az történt, hogy valamiért nem indult el a GC időben, ezért felhalmozódtak a foglalások. Senki nem látta ezt előre, és a tesztkörnyezetben sem fordult soha elő, ezért lett a keret meghatározva úgy, ahogy. Nem a terheléssel volt baj, az nem volt nagyobb az átlagosnál, nem is azzal, hogy ne lett volna kellő ráhagyás a keretre, hanem azzal, hogy nem ütemeződött be a GC valamiért. Vagy beütemeződött, csak nem futott le, ez nem derült ki egyértelműen a logokból, csak az, hogy a memória nem szabadult fel, ezért felhalmozódott. Ha C-t hasznháltak volna, ahol muszáj programatikusan felszabadítanod és pont emiatt erre teszt is írható, ez nem fordulhatott volna elő.

Na de a GC-nek pont az a feladata takarítson, de csak azt tudja kitakarítani, amit lehet. Ha lenne egy OOM, akkor előtte a GC mindenképp fut, tehát elvileg csak akkor kapsz OOM-et, ha tényleg nem lehetett semmit se csinálni. Ekkor viszont kérdés, hogy megfelelően be lett-e konfigurálva a VM hogy ilyen esetben csináljon egy komplett memory dump-ot, hogy lehessen analizálni, hogy mi is történt. Valószínűleg ez nem történt meg az üzemeltetés oldaláról, és ilyenkor szokott menni a pingvinezés.

Éppen ezért, semmilyen különbség nem történt volna akkor, ha C-be írták volna meg, maximum annyi, hogy csak később jött volna crash (mert a nem foglalható memória esetén kb. annyit tud csinálni a C is, hogy nyom egy exit-et).

Éppen ezért, semmilyen különbség nem történt volna akkor, ha C-be írták volna meg

Ez az, amiben hatalmasat tévedsz. Ha C-ben lett volna írva, akkor sosem fordulhatott volna elő olyan, hogy a GC valamiért nem fut le, és emiatt a tesztkörnyezetben használt bemérésnél kapott keretet sem léphette volna soha túl, így crash sem lett volna soha.

Újra, nincs olyan hogy a gc nem fut le. A gc mindig lefut oom előtt. Ha nem futott le akkor légyszives linkelj egy hibajegyet amit felvettetek, mellékelve a memory dump-ot.

OutOfMemoryError: The Java virtual machine implementation has run out of either virtual or physical memory, and the automatic storage manager was unable to reclaim enough memory to satisfy an object creation request.

Én nem tudom, mit csinál a java VM, de a Microchip MPLAB-X fejlesztői környezet simán dob Memory lack üzenetet 8 GiB RAM-mal rendelkező gépen. Miközben egy böngésző három nyitott füllel, egy mail kliens és mondjuk egy evince van a memóriában az Xfce mellett. Szánalmas, hogy emiatt a vacak miatt kellet új gépet vennem. Az MPLAB-X java-s csoda, ennyiben releváns itt.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Egyrészt a „hivatalos” JVM legfeljebb annyi memóriát eszik, amennyit az indításnál bekonfigurálsz, szóval simán jöhet OOM hiba akkor is, ha a rendszernek még van szabad memóriája. Másrészt a te logikád: írtak már vacak programot C-ben, tehát a C vacak.

A keserűségem eléggé szubjektív, s nem feltétlen a JVM-nek szól, de némi leegyszerűsítéssel a fejlesztői környezet egy text editor, meg valami, ami syntax highlight-ot tud, illetve egy C fordító. Aztán van néhány tíz forrásfile, darabonként tíz-száz kilobyte-os nagyságrendben, s ennek így kevés a 8 GiB RAM-mal szerelt gép. Érdekes módon a Qt Creator nem dől össze, a Geany sem, meg amíg aktív volt a project, az Anjuta sem. De a jó öreg Midnight Commander is megelégszik kevesebbel. :) Tudom, ez utóbbi talán túlzó, szélsőséges példa.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Még egyszer, semmi köze a java-hoz/jvm-hez, valószínűleg nem volt jól bekonfigolva, vagy valamit összetákoltak. Ahogy néztem egy netbeans van alatta, azzal mi anno százezer soros programokat fejlesztettünk, 8GB rammal, szóval valószínűleg nem ez a szűk keresztmetszet.

Tudom, láttam, köszönöm. Valamiért mégis azt várom egy fejlesztői környezettől, hogy nem nekem kell hekkelgetni az indító scriptjeit manuálisan. Most az lett a megfejtés, hogy alá tettem egy izmosabb gépet 8 magos Ryzen 7 5700U CPU-val és 16 GiB RAM-mal.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Szerintem a gyártó beállíthatott volna egy olyan értéket, amivel egy kis vagy közepes projekt biztosan elketyeg. Ha meg elszáll, akkor valahogy körbe kellene tákolni egy felülettel, hogy figyike ezért szállt el, és így lehet javítani. Szóval lehetne ezt úgy is, hogy nem locsemegének kell utánajárni, hogy akkor ezt itt hogy? Egy felhasználótól ezt nem illek elvárni, részéről a hibaüzenettel elszáll -> nem működik ->szar képlet teljesen jogos.

Ha jol ertem, a szoban forgo szoftver egy IDE, itt a "felhasznalo" feltetelezhetoen birtokaban van bizonyos alapismereteknek, peldaul hogy mi az a RAM, mennyi van belole a gepeben, es mennyit lehet belole odaadni dedikaltan egy alkalmazasnak.

Altalanossagban persze igazad lenne, de akkor meg a szoftver gyartojat kell elovenni, nem a Java-t.

Biztos, hogy nem statikusan kap fix memóriaméretet a jvm. Lévén, a 8 GiB RAM-mal szerelt gépen bemondja, hogy memory lack, míg a 16 és 32 GiB-tal szerelt gépen megy rendesen. Persze, azt nem néztem meg, hogy esetleg egy free kimenetéből konfigurál-e valamilyen algoritmussal rendelkezésre álló memóriát.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Szokás, hogy a rendelkezésre álló összesnek egy bizonyos százalékát kéri. Valami nagyokos kitalálta, és azóta ezt a "megoldást" másolják, ami ugye hülyeség, de ez lett a divat. Mondjuk a fejlesztő 32GB-s gépet használt, ezért belőtte az arányt 1/32-edre. Te meg csak azért vettél egy rakás RAM-ot, hogy annak a 32-ed részét használhasd! :-)

Szerintem az a nagy helyzet, hogy geleinek igaza van, és a fóbiád áldozata lettél: annyira utálod a Javát, hogy nem voltál hajlandó utánanézni a probléma okának. Nem elképzelhetetlen, hogy tényleg kevés neki a 8GB, de azért nem túl valószínű.

Azért annyira nem bánom, hogy vettem egy 8 magos Ryzen 7 5700U-val és 16 GiB RAM-mal egy Acer Swift 3-at. Az a forráskód, ami a 4 magos N4200-val, 8 GiB RAM-mal rendelkező Acer Aspire ES1-en 1 perc alatt fordult le, a Swift 3-on 5 másodperc. :) A picike gép már hat éves volt.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

A nem JVM alapú rendszerek úgy működnek, hogy amíg a rendszerben van szabad memória, addig foglalnak, ha nincs, akkor így járt a felhasználó. A JVM úgy működik, hogy egy adott címtartományt befoglal, és csak ebben dolgozik. Ha ez elfogy, és nem tud memóriát felszabadítani, akkor kapsz egy OOM hibát. Azt, hogy a JVM mekkora címtartományt foglaljon be (ezzel még nem jár memória foglalás) a heap számára, egy külön paraméterrel tudod állítani (-Xmx paraméter).

Bővebben mondjuk itt:

https://sematext.com/glossary/jvm-heap/

Két fundamentális hibaforrás van: tervezési és implementációs. Igaz, tegnap hanyag voltam, mert az implementációs hibáknál csak a memóriakezelési hibákra koncentráltam, ami nyilván leegyszerűsítés. Szóval a potenciális hibaforrások száma nem 2-ről 1-re csökken, de mindenképp csökken.

Matematika nincs, van viszont konkrét ellenpélda rá tapasztalatból: mivel a Java GC-s, ezért esélyed sincs szabályozni, mennyi memóriát is foglal éppen a program.

Ez egy konkrét implementációra igaz. A specifikáció nem nyújt semmilyen garanciákat a GC futására, ez igaz. Egy implementáció viszont olyanokat nyújt, amilyeneket akar. Régebben volt külön kliens és szerver GC az eltérő terhelési minták miatt. Abszolút semmilyen elvi akadálya nincsen akár biztonságkritikus rendszerekbe való GC implementációnak. Valójában volt is ilyen.

A Rust szerintem teljes mértékben memóriabiztos, ha az unsafe konstrukciók nem engedélyezettek. Abban az értelemben, hogy túlírás, vagy túlolvasás nem lesz, nem lehet a processz támadására használható memória bug a programban. Nem vagyok Rust szakértő meg evangelista, de ez lényegi kérdés azért okoskodok bele.

na. irány a ló túlóldala ! Szvsz nem a c, c++ -t kell elhagyni, elsőkörben elég lenne leszokni a nullterminált stringről, amire a biztonsági hibák ~50% -a visszavezethető.

HUP te Zsiga !

nem a zaro \0 -a problema, hanem az elore meg nem mondhato hosszusagu stringnek lefoglalt memoriaterulet meretebol adodo stiklik. azaz a hanyag memoriakezeles. amikor nemfigyelnek es valami joliranyzott modon a lefoglalt mondjuk 100 byteba sikerul beleirni 200-at.

vagy ottvan a Zenbleed ; ugye az is arrol szol, hogy a stringhossz azaz \0 keresesenek gyorsitasara kitalaltak holmi gepi utasitasokat, amik idonkent spekulativan  hátizé.  // es egy hoszabb stringnel meg ezzel se eri el a pascalos string mov ah, 0 ; mov al,[stringnulladikbyteja]  sebesseget... //

HUP te Zsiga !

Van, amikor a pascalos formátum a praktikus - pl. strlen() nyilván sokkal gyorsabb pascalos ábrázolásnál -, de nagyon jól tud jönni, amikor van egy

key=value

szerkezetű sorom, amit úgy split-elek szét, hogy megkeresem az '='-t, majd felülírom '\0'-val. Ez pascalos ábrázolásnál is megoldható, bár picivel nyűgösebb. Jobban belegondolva alig lenne bonyolultabb. Fenébe, rossz példát hoztam. :)

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

hátigen, pascalban átirod a hosszt es ennyi. feltéve, hogy a "=" utáni rész nemszükséges. De feltételezem, hogy az is kell, ezért arra meg tippre rairanyitasz egy masik pointert.  Nem minősíteném a szakma csúcsának ezt a gyakorlatot. Sőt. Azt állítom, hogy pont az ilyen trükkök miatt marad ezernyi memoriakezelési hiba a szoftverekben.

a pascal megvalósításnak két hátránya van : a fix méret és a max. 255 karakteres hossz.  De szvsz mostmár van elég memória, -- ugyis annyimindenre elpazarolják a programolók, akkor erre miért ne lehetne ? -- ki lehetne terjeszteni, hogy 2 byteon tartsa nyilvan az aktualis hosszt, és jóidő.

HUP te Zsiga !

Mert már minden fontosabb dolgot lerendeztek a választóik és a világ érdekében.

Amikor elindult ez az egész használjunk "memory safe" programnyelveket sztori, kizárólag arról szólt, hogy az iszonyatos mennyiségben gyártott, cserében tapasztalatlan egyetemistákkal csináltatott ügyviteli szoftverek alá ne használjunk versenytechnikát, mert az hozzá nem értő kezében kockázatot eredményez. 

De a célszerszámok alá muszáj lesz továbbra is. Jelenleg nincs alternatíva. És ha azt mondod de, mert xy programnyelv már szinte ugyanolyan gyors, akkor nézz utána hogy az vajon használ e C-ben írt libeket, C-ben írt motort vagy fordítás közben nem-e C a köztes nyelv amire fordul. 

Csak ha kiöntjük a gyereket a fürdővízzel, nem lesz aki tovább optimalizálja a C világot és fejleszti a célszerszámokat

A sebesség a mai világban - ha nem erősen korlátos, pl. embedded rendszerről beszélünk - teljesen sokadlagos szempont. A fontos szempont a skálázhatóság, a könnyű integrálhatóság (modul, alrendszer, és rendszer szinten), hordozhatóság (mindenféle processzorok, mindenféle operációs rendszerek), a toolchain, stb.

Ez most a C ellen vagy mellett hozzászólás volt? :)

Mert igen meglepne ha nem a C nyerne hogy ha összeszámoljuk hányféle hardveren fut és mennyire hordozható a kód. Mondjuk az kétségtelen hogy ehhez kellett az a sok évtized amíg a hello world körüli sokmegányi ifdef ezt kiadta :D

First, the language must allow the code to be close to the kernel so that it can tightly interact with both software and hardware; second, the language must support determinism so the timing of the outputs are consistent; and third, the language must not have – or be able to override – the “garbage collector,” a function that automatically reclaims memory allocated by the computer program that is no longer in use.

These requirements help ensure the reliable and predictable outcomes necessary for space systems.
According to experts, both memory safe and memory unsafe programming languages meet these requirements. At this time, the most widely used languages that meet all three properties are C and C++, which are not memory safe programming languages. Rust, one example of a memory safe programming language, has the three requisite properties above, but has not yet been proven in
space systems.

retek Jávát direkt tiltanák, nemtom honnan szoptátok ezeket az ajánlott nyelveket. trey féle dezinformációs hírek megint...