ARM i var fjärde bärbar dator om fem år

Permalänk
Medlem

Den här artikeln känns pessimistisk skulle jag säga. Skulle bli förvånad om annat än rena spelmaskiner körde x86 om 5 år

Permalänk
Medlem
Skrivet av JeanC:

Får man fråga vad som begränsar dig? Vi funderar nämligen på att köpa in till kontoret.

Vi arbetar med en webapp som vi kör via docker lokalt, å vi är en bunt versioner bakom å vår lösning för automatiska tester fungerar inte på arm.

Sen är man rätt begränsad om man vill köra vms etc. T.ex vill ja köra linux virtuellt å fick köra en arm-version givetvis, å då stämmer typ inga guider för hur man installerar då guiderna säger t.ex snap å snap säger bara att det inte finns för arktiekturen i fråga.

Sjukt störande.

mycket annat fungerar fint dock

Permalänk
Medlem

Fixas det ett väl fungerade Windows till ARM så kan jag vara intresserad. Förutsatt att prestandan är bättre eller mer prisvärd.

Visa signatur

JJ2 Multiplayer
JJ2 ZStats

[1] Ryzen 5800X | 5500XT | Kingston A2000 | Lenovo G24-10 144Hz [2] Ryzen 5700G | RX 480 | WD Blue SN550 [3] Ryzen 5600G | Kingston A2000 [4] Ryzen 3600 | GT 740 | 850 EVO [5] Ryzen 3600 | Geforce 405 | 850 EVO (alla är i bruk)

Permalänk
Datavetare
Skrivet av Sidde:

Det du beskriver är det jag skrev lite längre upp också: #19928823
Speciellt i servervärlden när AIX, HP/UX och Solaris tynade bort så började många produktleverantörer bara strunta i att fixa arch-oberoende applikationer även om det var rena c/c++-program som kunde kompileras på alla plattformarna.
Det är nog till stor del för att det finns en hel generation där ute nu som aldrig sett något annat än x86 och "molnet".

Det var absolut en del sådana problem direkt efter lanseringen av M1. Men givet informationen från Homebrew och MacPorts projekten var det ändå relativt få program/bibliotek som hade den här typen av problem och man löste ju dessa rätt snabbt.

Linux är det dominerade OSet för alla möjliga tänkbara inbyggda-system. x86_64 har, trots flera försök från både Intel och AMD, aldrig blivit en relevant spelare där. Länge dominerade nätverkslösningar av PowerPC, billiga/riktigt strömsnåla områden av 32-bit Arm och alla dessa flyttades i praktiken till ARM64 under senaste decenniet.

Ovanpå det jobbar ju kina med flera rätt frenetiskt med RISC-V. I nuläget hittar man främst den ISAn i mikrokontrollers och inbyggda-system med Linux som OS.

En av de största felkällorna tidigare i cross-plattform programvara skrivet i C/C++ var big/little-endian buggar samt att många icke-x86 inte (direkt) hanterade "unaligned access". RISC-V och ARM64 fungerar på samma sätt som x86_64 på just detta (och det är knappast en slump). Big-endian och att kräva att folk håller sin data på "rätt" alignment är i praktiken dött...

Självklart finns det en del program och bibliotek som inte är relevant för inbyggda-system, men det är trots allt ett gigantiskt överlapp mellan vad dessa använder (totalt sett) och vad som används i "backend-system". D.v.s. x86 må ha varit dominant i "molnet", men majoriteten av all grundläggande programvara har också körts på andra ISA.

Där det lär finnas problem är det artikeln pratar om: desktopmiljön! Viss lindring lär Android ge, men det kommer finnas desktop-inriktade saker som i praktiken förutsätter x86_64.

Skrivet av Celebmir:

Intressant att de skapar en ”trend” med två punkter som data. 2021 och 2022.

Detta handlar ju om ARM64* i desktop PC, d.v.s. exklusive mobiler/pekplattor. Andelen innan 2021 var 0 %.

Den ökning som skedde från 2021 till 2022 var i praktiken Apple/MacOS ökning på PC-marknaden då endast Apple har en vettig ARM64 plattform för segmentet. Den systemkrets Microsoft/Qualcomm satte ihop var i praktiken en utdaterad mobilplattform, ur det perspektivet presterade den helt OK men i absolut tal var det inte bra!

Så extrapoleringen framåt är verkligen vilda gissningar i nuläget. Det som ändå talar för att vi kommer se en kraftig ökning av ARM64 på PC-marknaden är att Microsoft, om någon, vet hur viktigt det är att hålla utvecklarna på "sin" plattform då Windows byggt sin dominas på att man tidigt drog till sig många utvecklare (det lär man ha Visual Studio att tacka för!).

Det är därför kritiskt för Microsoft att skynda på utvecklingen av "vettiga" ARM64 baserade enheter designade för Windows. Utvecklingen i datacenter bedöms kunna gå ännu snabbare mot ARM64.

Det finns fördelar med att köra samma CPU-arkitektur på den datorn man utvecklar programvaran som den man i slutändan kör på. I nuläget betyder det att man har ett realistiskt val som utvecklare: MacOS! Det är rejält dåliga nyheter för Windows om något annat OS blir det dominerande bland utvecklare, så man behöver snabbt få fram vettiga ARM64 alternativ för Windows.

* skriver ARM64, inte ARM, för Arm har två helt separata instruktionsuppsättningar där ARM64 lanserades 2010 medan 32-bit Arm kom redan på 80-talet. ARM64 och "tidigare" Arm är mindre relaterade än t.ex. RISC-V är relaterad till MIPS. Fram till bara någon år sedan kunde Arms egna Cortex A/X modeller köra båda instruktionsuppsättningarna, men likt Apple har man nu släppt stödet för "gamla" Arm ISA och stödjer numera bara ARM64.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem

AMD borde inte avbrutit K12 utan även fortsatt utveckla ARM-processorer.
Hoppas det även kommer bra RISC-V lösningar framöver.

Permalänk
Medlem

Får jag lägre driftstemp (passiv kylning tack) och längre batteritid på en bärbar så kör jag mer än gärna ARM.

Skrivet av Yoshman:

Fördelen med Docker är att man får isoleringen

Fast får man verkligen det? Så vitt jag vet är den typen av isolering sämre än med hårdvarustödda virtuella maskiner (och därmed enklare att bryta sig ut ur för malware). Sen verkar ju Docker som standard köras under rootanvändaren också, vilket ju inte är så säkerhetsmässigt fördelaktigt, och att ändra detta har sina potentiella problem (minns inte exakt vad, men något tjafs var det när jag gjorde det senast på en testmaskin).

Visa signatur

9950X3D | 5080

Permalänk
Inaktiv
Skrivet av Scarabeo:

ARMa Intel och AMD.

Intel och AMD: ARMen vad fan…

Permalänk
Medlem

hoppas inte, allergisk mot stora mobiltilefoner (bärbar arm dator) & goggle

Visa signatur

Arne Berg

Permalänk
Medlem
Skrivet av maweric:

Fixas det ett väl fungerade Windows till ARM så kan jag vara intresserad. Förutsatt att prestandan är bättre eller mer prisvärd.

Jag kör Raspberry Pi med Ubuntu, har en Mac M1 och dessutom en Microsoft Surface Pro X med Arm processor.

Windows på Arm är det inget fel på, nackdelen är att inte alla program kör native Arm ännu.

På Surface Pro X använder jag mest Firefox, Spotify och Photoshop (som alla är native Arm) men det är många program som inte är kompilerade för Arm ännu.

Microsoft måste också bli bättre på att tydliggöra vilka appar i Microsoft store som är x86 och vilka som är Arm - i dagsläget måste man leta aktivt på nätet för att hitta Arm-versionen av program/appar.

Permalänk
Datavetare
Skrivet av backfeed:

Sen verkar ju Docker som standard köras under rootanvändaren också, vilket ju inte är så säkerhetsmässigt fördelaktigt, och att ändra detta har sina potentiella problem (minns inte exakt vad, men något tjafs var det när jag gjorde det senast på en testmaskin).

Vad betyder "hårdvarustödda virtuella maskiner" mer än att den isolering de erbjuder numera har olika former av HW-acceleration i kisel?

Hypervisors ("VMs") och OS-kärnor gör i grunden exakt samma sak: de hanterar resurser och erbjuder olika former av services till sina "applikationer", en av de viktigaste services man erbjuder är isolering från övriga "applikationer".

För en hypervisor är applikationerna OS-kärnor, för OS-kärnor är applikationer "vanliga" applikationer (user-land processer).

HW-stödet för isolering kommer primärt ned till MMU. Hypervisors har en MMU av MMUs, kärnor har en MMU.

Båda har buggar, både i programvara och definitivt även i HW (nu när AMD börjar få en relevant andel i datacenter börjar också antalet hittade HW-buggar ökar rejält, tyvärr lär samma gälla ARM64 men där finns ändå fundamentala fördelar i att det är en långt renare/enklare ISA).

Hypervisors och OS-kärnor har olika uppgifter. Om vi delar dator-HW i ett datacenter används naturligtvis en hypervisor för att ge oss en OS-kärna var.

Men som utvecklare/organisation, ge ett enda relevant use-case (utöver att man av någon anledning måste köra saker på olika OSes) där det finns en fördel med VMs över containers. Det man vill uppnå är separation mellan olika services, containers har en högre grad av isolation än "vanliga" applikationer och egentligen räcker det stöd OS:et ger, men av pakteringsmässiga och mer eller mindre dålig ingenjörskonst i programmeringdesign har det visat sig väldigt fördelaktigt att paketera services i "containers".

Skrivet av backfeed:

Sen verkar ju Docker som standard köras under rootanvändaren också, vilket ju inte är så säkerhetsmässigt fördelaktigt, och att ändra detta har sina potentiella problem (minns inte exakt vad, men något tjafs var det när jag gjorde det senast på en testmaskin).

Själva containers/applikationer har aldrig behövt köras som root, däremot behövde docker-services:eb köras som det för att kunna göra sin "magi" mot Linux cgroups/namespaces.

Detta var ett problem som löstest i kärnan 2016 med cgroups v2 och som markerats "stabilt" i Docker sedan 2020, v20.10.

Värt att notera är att Docker-desktop (Windows/MacOS) aldrig behövt köras som root då man där kör QEMU under huven då containers faktiskt kör Linux.

Edit: och att man alltid kan köra som "root" i containers är ju inget problem. Detta är ju en funktion hos Linux namespaces där både PIDs (via PID namespace) och användare (via USER namespace) har ett värde inuti container, men har något annat på "host" (så root i container kan vara vilken användare som helst på host).

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem
Skrivet av Snubb1:

AMD borde inte avbrutit K12 utan även fortsatt utveckla ARM-processorer.
Hoppas det även kommer bra RISC-V lösningar framöver.

Internt är ju moderna x86 mer lika RISC, så det handlar mest om en separat front-end om jag förstått det rätt. Om det är så så borde de kunna få till det om deras tidigare arbete är alls kompatibelt. Frågan är dock hur långt efter de skulle bli idag

Qualcomm/Nuvia, Apple, och många andra har ju påbörjat sina ARM-designer för många år sedan, inte så att man gör det på något år i alla fall

Skulle bli kul att se AMD göra ett riktigt försök

Permalänk
Medlem
Skrivet av Snubb1:

AMD borde inte avbrutit K12 utan även fortsatt utveckla ARM-processorer.
Hoppas det även kommer bra RISC-V lösningar framöver.

K12 var ett R&D-intensivt projekt. Tror AMD i det läget behövde alle man på däck för ryzen

Visa signatur

2x Xeon E5-2699 v4, 256gb Quad Channel RAM, 2x nVIDIA 980ti
----
AMD Ryzen 5950X, 128gb Dual Channel RAM, 2x AMD 6900XT
----
Massiv amiga och 3dfx-samling.

Permalänk
Medlem
Skrivet av danedi:

K12 var ett R&D-intensivt projekt. Tror AMD i det läget behövde alle man på däck för ryzen

Jag tror jag är villig att hålla med, utan lyckosagan som Ryzen inneburit så hade nog inte K12 ens blivit av. Hoppas det dock är återstartat i tystnad nu när ekonomin borde kunna tillåta det

Permalänk
Medlem

Apple Silicon har flyttat målet närmare, men annars känns ARM för datorer lite som fussionskraft. Det är på gång, men ligger alltid n år fram i tiden. Den stora risken jag ser just nu är att nästa tillverkade som får till ett ARM64 system med bra prestanda kommer ta för mycket inspiration inte bara från Apples teknik, utan även från deras prissättning.

Permalänk
Medlem
Skrivet av Pulver:

Jag kör Raspberry Pi med Ubuntu, har en Mac M1 och dessutom en Microsoft Surface Pro X med Arm processor.

Windows på Arm är det inget fel på, nackdelen är att inte alla program kör native Arm ännu.

På Surface Pro X använder jag mest Firefox, Spotify och Photoshop (som alla är native Arm) men det är många program som inte är kompilerade för Arm ännu.

Microsoft måste också bli bättre på att tydliggöra vilka appar i Microsoft store som är x86 och vilka som är Arm - i dagsläget måste man leta aktivt på nätet för att hitta Arm-versionen av program/appar.

Finns det någon som helst möjlighet att köra x86 program på Windows ARM? Emulator eller liknande?

Visa signatur

JJ2 Multiplayer
JJ2 ZStats

[1] Ryzen 5800X | 5500XT | Kingston A2000 | Lenovo G24-10 144Hz [2] Ryzen 5700G | RX 480 | WD Blue SN550 [3] Ryzen 5600G | Kingston A2000 [4] Ryzen 3600 | GT 740 | 850 EVO [5] Ryzen 3600 | Geforce 405 | 850 EVO (alla är i bruk)

Permalänk
Datavetare
Skrivet av danedi:

K12 var ett R&D-intensivt projekt. Tror AMD i det läget behövde alle man på däck för ryzen

K12 och Ryzen var i mångt och mycket samma projekt.

Majoriteten av fokus lades på mikroarkitekturen. Hela idéen med K12 var att använda samma mikroarkitektur som för Ryzen. Ryzen kör sedan med en x86_64 front-end medan K12 var tänkt att köra med en ARM64 front-end.

Hade man lansera dessa när Ryzen lanserades hade AMD varit ensamma med en "desktop/server-class" ARM64 design. Idag finns flera ARM64 baserade mikroarkitekturer med högre prestanda per cykel jämfört med Zen4, så nu är det inte en lika självklar sak att gå vidare med.

Men givet att Zen4 går att klocka så högt, betydligt högre än både Apple Silicon (som maxar på 3,7 GHz) och Cortex X3/Neoverse V2 (som ska gå att klocka till ~3,5 GHz) så skulle ändå AMD kunna bygga en ARM64 baserad CPU med topp-prestanda. Frågan är bara hur mycket av perf/W som går förlorad när man pushar förbi 5 GHz.

En, av flera, orsaker till varför det går att få så hög perf/W med ARM64 är att man specifikt designat den ISAn för att underlätta extremt "breda" mikroarkitekturer ("gamla" Arm ISA var usel på just denna punkt) som möjliggör väldigt hög prestanda per CPU-cykel.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Datavetare
Skrivet av maweric:

Finns det någon som helst möjlighet att köra x86 program på Windows ARM? Emulator eller liknande?

Initialt hade Windows bara stöd för att köra x86 program, d.v.s. 32-bit x86 kod.

I Windows 11 lades inte bara stöd för att köra x86_64 till (i grunden exakt samma teknik Apple använder i Rosetta 2), med det Microsoft kallar Arm64EC kan samma process blanda ARM64 och x86_64 kod.

"Code built as Arm64EC is interoperable with x64 code running under emulation within the same process. The Arm64EC code in the process runs with native performance, while any x64 code runs using emulation that comes built-in with Windows 11. Even if your app relies on existing dependencies or plugins that don't yet support Arm, you can start to rebuild parts of your app as Arm64EC to gain the benefits of native performance."

Microsoft känner nog att något likt Arm64EC är nödvändigt för att kunna göra ett väldigt gradvis införande av ARM64 kod i Windows. Det har varit x86/x86_64 only så länge, övergången till x86_64 tog ju brutalt mycket längre på Windows än det gjorde på t.ex. Linux och MacOS!

Ovanpå detta har Windows 11 även den form som erbjuds i Rosetta 2, d.v.s. möjlighet att köra "rena" x86_64 binärer.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem
Skrivet av Yoshman:

Initialt hade Windows bara stöd för att köra x86 program, d.v.s. 32-bit x86 kod.

I Windows 11 lades inte bara stöd för att köra x86_64 till (i grunden exakt samma teknik Apple använder i Rosetta 2), med det Microsoft kallar Arm64EC kan samma process blanda ARM64 och x86_64 kod.

"Code built as Arm64EC is interoperable with x64 code running under emulation within the same process. The Arm64EC code in the process runs with native performance, while any x64 code runs using emulation that comes built-in with Windows 11. Even if your app relies on existing dependencies or plugins that don't yet support Arm, you can start to rebuild parts of your app as Arm64EC to gain the benefits of native performance."

Microsoft känner nog att något likt Arm64EC är nödvändigt för att kunna göra ett väldigt gradvis införande av ARM64 kod i Windows. Det har varit x86/x86_64 only så länge, övergången till x86_64 tog ju brutalt mycket längre på Windows än det gjorde på t.ex. Linux och MacOS!

Ovanpå detta har Windows 11 även den form som erbjuds i Rosetta 2, d.v.s. möjlighet att köra "rena" x86_64 binärer.

Intressant. Tack för svaret!
Antar att gamla program med 32-bit x86 kod bara är att glömma?

Edit: eller kanske bara jag som är trög. 32-bit x86 fungerar redan på Windows ARM.

Visa signatur

JJ2 Multiplayer
JJ2 ZStats

[1] Ryzen 5800X | 5500XT | Kingston A2000 | Lenovo G24-10 144Hz [2] Ryzen 5700G | RX 480 | WD Blue SN550 [3] Ryzen 5600G | Kingston A2000 [4] Ryzen 3600 | GT 740 | 850 EVO [5] Ryzen 3600 | Geforce 405 | 850 EVO (alla är i bruk)

Permalänk
Datavetare
Skrivet av maweric:

Intressant. Tack för svaret!
Antar att gamla program med 32-bit x86 kod bara är att glömma?

Edit: eller kanske bara jag som är trög. 32-bit x86 fungerar redan på Windows ARM.

Det går att köra 32-bit x86-kod sedan tidigare.

Däremot gissar jag att funktionen som erbjuds i Arm64EC är x86_64 only. Det lär inte vara ett stort problem, eventuell kvarvarande 32-bit kod borde inte vara prestandakritisk och då lär det fungera OK ändå.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem
Skrivet av maweric:

Intressant. Tack för svaret!
Antar att gamla program med 32-bit x86 kod bara är att glömma?

Edit: eller kanske bara jag som är trög. 32-bit x86 fungerar redan på Windows ARM.

32-bit x86 har fungerat sedan första versionerna av windows för ARM

64-bit stöd (x86_64 och framåt) kom förra året och nu kan alla gamla program köras felfritt i windows på arm

Permalänk
Medlem
Skrivet av Yoshman:

Vad betyder "hårdvarustödda virtuella maskiner" mer än att den isolering de erbjuder numera har olika former av HW-acceleration i kisel?

Hypervisors ("VMs") och OS-kärnor gör i grunden exakt samma sak: de hanterar resurser och erbjuder olika former av services till sina "applikationer", en av de viktigaste services man erbjuder är isolering från övriga "applikationer".

För en hypervisor är applikationerna OS-kärnor, för OS-kärnor är applikationer "vanliga" applikationer (user-land processer).

HW-stödet för isolering kommer primärt ned till MMU. Hypervisors har en MMU av MMUs, kärnor har en MMU.

Båda har buggar, både i programvara och definitivt även i HW (nu när AMD börjar få en relevant andel i datacenter börjar också antalet hittade HW-buggar ökar rejält, tyvärr lär samma gälla ARM64 men där finns ändå fundamentala fördelar i att det är en långt renare/enklare ISA).

Hypervisors och OS-kärnor har olika uppgifter. Om vi delar dator-HW i ett datacenter används naturligtvis en hypervisor för att ge oss en OS-kärna var.

Men som utvecklare/organisation, ge ett enda relevant use-case (utöver att man av någon anledning måste köra saker på olika OSes) där det finns en fördel med VMs över containers. Det man vill uppnå är separation mellan olika services, containers har en högre grad av isolation än "vanliga" applikationer och egentligen räcker det stöd OS:et ger, men av pakteringsmässiga och mer eller mindre dålig ingenjörskonst i programmeringdesign har det visat sig väldigt fördelaktigt att paketera services i "containers".

Själva containers/applikationer har aldrig behövt köras som root, däremot behövde docker-services:eb köras som det för att kunna göra sin "magi" mot Linux cgroups/namespaces.

Detta var ett problem som löstest i kärnan 2016 med cgroups v2 och som markerats "stabilt" i Docker sedan 2020, v20.10.

Värt att notera är att Docker-desktop (Windows/MacOS) aldrig behövt köras som root då man där kör QEMU under huven då containers faktiskt kör Linux.

Edit: och att man alltid kan köra som "root" i containers är ju inget problem. Detta är ju en funktion hos Linux namespaces där både PIDs (via PID namespace) och användare (via USER namespace) har ett värde inuti container, men har något annat på "host" (så root i container kan vara vilken användare som helst på host).

En container har visserligen isolering mellan processer men man delar tyvärr väldigt mycket med kerneln.
Container-escape-sårbarheter är rätt vanliga och framförallt klart vanligare än VM-escapes.
Det finns gott om sårbarheter i kerneln eller andra delade resurser som man måste tänka på.

Andra problem är att det inte bara är kerneln man delar utan även annan HW.
T.ex ska du prata med ett annan hårdvara som delas mellan containrar eller kerneln:
(Såklart blir det samma problem om man delar hw mellan VMar, men det är klart mer ovanligt)

Men de två andra delarna som ger större problem för containrar än dedeikerade VMar är filsystem och nätverk.
Om t.ex OSet du kör container-runtimen på har massa nätverkstjänster som bindar resurser till alla nätverksinterface är/kan dessa också exponerade i en container. Vissa tjänster som t.ex en redis-databas är by default inte ens uppsatt med auth...
För filsystem har det visat sig rätt svårt att isolera bort filsystemet från en container när du samtidigt måste t.ex expnera /proc.
Och tittar man på docker så är det ju inte ovanligt att man exponerar hela sitt filsystem för alla containrar.

Sagan om root är också problematisk, för även om en process i en container som är root, inte är root för "kerneln" så är du root på filsystemet. Många applikationer är inte designade i sig för att köras med höga behörigheter och ger därför inbyggda sårbarheter såsom att man får skrivrättigheter till delar av sitt filsystem man annars inte ska köra.

Det jag vill säga att vi är rätt många som anser att Containrar inte alls är lika säker för separation som VMar.

Permalänk
Medlem
Skrivet av maweric:

Finns det någon som helst möjlighet att köra x86 program på Windows ARM? Emulator eller liknande?

Du har fått flera bra svar men kan bara flika in att det inte är alltid det fungerar ändå.

Jag har exempelvis testat 'Mullvad VPN' för Windows på min Surface Pro X som alltså är x86 och den installeras OK, men kan ändå inte ansluta till tjänsten.

Det kan säkert behövas en native ARM från Mullvad för att det ska fungera.

Permalänk
Skrivet av Pulver:

Du har fått flera bra svar men kan bara flika in att det inte är alltid det fungerar ändå.

Jag har exempelvis testat 'Mullvad VPN' för Windows på min Surface Pro X som alltså är x86 och den installeras OK, men kan ändå inte ansluta till tjänsten.

Det kan säkert behövas en native ARM från Mullvad för att det ska fungera.

Åtminstone på Mac, troligen i Windows också, kan du köra applikationer genom kompatibilitetslagren, men du kan inte emulera drivrutiner. VPN-klienter är ofta baserade på virtuella nätverkskort; därav funkar inte dessa.

Permalänk
Datavetare
Skrivet av Sidde:

En container har visserligen isolering mellan processer men man delar tyvärr väldigt mycket med kerneln.
Container-escape-sårbarheter är rätt vanliga och framförallt klart vanligare än VM-escapes.
Det finns gott om sårbarheter i kerneln eller andra delade resurser som man måste tänka på.

Det är därför hypervisors inte är poänglösa. De har högre kostnad, men de isolerar även OS-kärnor.
Är därför vettigt att använda hypervisors för att partionera olika organisationer som delar HW. Olika organisationer har i normalfallet ingen anledning att lita på varandra.

Men i grunden gäller ändå: kan du inte lita på OS-kärnan är du ändå rökt. Graden av "rökt" spelar liksom inte så stor roll...

Containers har lägre, i vissa fall väsentligt lägre, overhead för kommunikation + de kostar klart mindre resurser att köra (i nivå med vilken process som helst, det är inte alls sant för hypervisors då de drar runt ett extra OS). Inom samma projekt/organisation finns därför flera anledningar att välja en sådan lösning där.

Skrivet av Sidde:

Andra problem är att det inte bara är kerneln man delar utan även annan HW.

T.ex ska du prata med ett annan hårdvara som delas mellan containrar eller kerneln:
(Såklart blir det samma problem om man delar hw mellan VMar, men det är klart mer ovanligt)

Normal kommer man inte åt någon HW direkt från en container. Det är möjligt att tillåta det och i det läget har det som kör inuti container samma direkta access till HW som "host". Men är typiskt också möjligt att ge indirekt access till HW via "virtuell" HW som delas mellan host/container och hosten agerar proxy mot verklig HW.

Skrivet av Sidde:

Men de två andra delarna som ger större problem för containrar än dedeikerade VMar är filsystem och nätverk.

Om t.ex OSet du kör container-runtimen på har massa nätverkstjänster som bindar resurser till alla nätverksinterface är/kan dessa också exponerade i en container. Vissa tjänster som t.ex en redis-databas är by default inte ens uppsatt med auth...
För filsystem har det visat sig rätt svårt att isolera bort filsystemet från en container när du samtidigt måste t.ex expnera /proc.
Och tittar man på docker så är det ju inte ovanligt att man exponerar hela sitt filsystem för alla containrar.

Fast just filsystemet är något man i väldigt nära 100 % inte direkt delar mellan containers och "host", varför skulle man göra det? Undantaget är "bind-mounts", men det är väl mer ett utvecklingshjälpmedel än något man använder i drift?

/proc och /sys går numera att till största del "emulera", d.v.s. det man ser i en container är inte direktaccess till host:ens /proc och /sys.

Finns en rad olika sätt att dela nätverk. Standardvalet är nästa alltid Dockers "bridge" mode som ger "containers" access till t.ex. internet via host:ens nätverk. Men det går fortfarande via virtuella Ethernet enheter, "containers" har inte direkt access till de fysiska interfacen.

Det är möjligt att ge direkt access till "containers", men varför skulle man göra det när det på en modern dator går att pusha åtskilliga TB/s över "veth"?

Portar man exponerar mot containers blir i "bridge" mode ofta även synliga utåt. Fast det beror på firewall/iptables policy och är fullt möjligt att ha en default-policy satt till "block" för all forwarding av trafik in mot containers. I det läget måste man explicit öppna varje port/service utåt, men går att ha en konfig som gör dem åtkomliga lokalt från host (eller så blockar man även det by default).

Vidare går det att låta specifika containers ha en separat nätverkslösning, t.ex. ett virtuellt Ethernet som inte är tillagd till host-bryggan. I det läget får man hantera hosten som vilken router som helst när det kommer till att bestämma vilken trafik som ska nå det virtuella Ethernet:et.

Det går absolut att ställa till det för sig här, men lösningarna finns!

Skrivet av Sidde:

Sagan om root är också problematisk, för även om en process i en container som är root, inte är root för "kerneln" så är du root på filsystemet. Många applikationer är inte designade i sig för att köras med höga behörigheter och ger därför inbyggda sårbarheter såsom att man får skrivrättigheter till delar av sitt filsystem man annars inte ska köra.

Det jag vill säga att vi är rätt många som anser att Containrar inte alls är lika säker för separation som VMar.

Antar att du pratar om host-filsystemet ovan. Varför skulle en container överhuvudtaget ha någon access till det i normalfallet? Att tillåta det låter verkligen som en disaster waiting to happen...

Normalfallet är väl ändå att varje container har sitt helt privata filsystem + möjligen någon delad volym + eventuellt bind-mounts (och dessa ger access till host-filsystemet).

Och om man nu måste ge sådan access: om Docker services inte kör som root har containers ingen root-access till host-filsystemet med mindre än att det finns kernel-buggar.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem
Skrivet av Yoshman:

Det är därför hypervisors inte är poänglösa. De har högre kostnad, men de isolerar även OS-kärnor.
Är därför vettigt att använda hypervisors för att partionera olika organisationer som delar HW. Olika organisationer har i normalfallet ingen anledning att lita på varandra.

Men i grunden gäller ändå: kan du inte lita på OS-kärnan är du ändå rökt. Graden av "rökt" spelar liksom inte så stor roll...

Containers har lägre, i vissa fall väsentligt lägre, overhead för kommunikation + de kostar klart mindre resurser att köra (i nivå med vilken process som helst, det är inte alls sant för hypervisors då de drar runt ett extra OS). Inom samma projekt/organisation finns därför flera anledningar att välja en sådan lösning där.

Normal kommer man inte åt någon HW direkt från en container. Det är möjligt att tillåta det och i det läget har det som kör inuti container samma direkta access till HW som "host". Men är typiskt också möjligt att ge indirekt access till HW via "virtuell" HW som delas mellan host/container och hosten agerar proxy mot verklig HW.

Grafikkort eller andra former av machine-learning-hw är väl kanske det vanligaste idag för detta med att dela HW mellan containrar där man kan få informationsläckage eller i värre fall container escape med priv esc-sårbarheter mellan containrar.

Skrivet av Yoshman:

Fast just filsystemet är något man i väldigt nära 100 % inte direkt delar mellan containers och "host", varför skulle man göra det? Undantaget är "bind-mounts", men det är väl mer ett utvecklingshjälpmedel än något man använder i drift?

/proc och /sys går numera att till största del "emulera", d.v.s. det man ser i en container är inte direktaccess till host:ens /proc och /sys.

Det finns tyvärr många scenarion där filsystem delas och precis som du säger är det det ofta med monteringar av t.ex nätverksfilsystem. Men det finns också andra sammanhang där man jobbar med så stora filer att det görs av kanske ren praktisk begränsning. Det jag ville säga var mer att det görs och det är ett problem i sig
Containrar möjliggör att man kan göra "fullösningar" och där man kan göra något kommer det ske.

Och påtal om /proc.
https://access.redhat.com/security/vulnerabilities/runcescape
https://www.trendmicro.com/vinfo/us/security/news/vulnerabili...

Skrivet av Yoshman:

Finns en rad olika sätt att dela nätverk. Standardvalet är nästa alltid Dockers "bridge" mode som ger "containers" access till t.ex. internet via host:ens nätverk. Men det går fortfarande via virtuella Ethernet enheter, "containers" har inte direkt access till de fysiska interfacen.

Det är möjligt att ge direkt access till "containers", men varför skulle man göra det när det på en modern dator går att pusha åtskilliga TB/s över "veth"?

Portar man exponerar mot containers blir i "bridge" mode ofta även synliga utåt. Fast det beror på firewall/iptables policy och är fullt möjligt att ha en default-policy satt till "block" för all forwarding av trafik in mot containers. I det läget måste man explicit öppna varje port/service utåt, men går att ha en konfig som gör dem åtkomliga lokalt från host (eller så blockar man även det by default).

Vidare går det att låta specifika containers ha en separat nätverkslösning, t.ex. ett virtuellt Ethernet som inte är tillagd till host-bryggan. I det läget får man hantera hosten som vilken router som helst när det kommer till att bestämma vilken trafik som ska nå det virtuella Ethernet:et.

Det går absolut att ställa till det för sig här, men lösningarna finns!

Precis som du säger. Det "går" att ställa till det för sig. Och jag kan säga att det gör det.
I många containerlösningar är det också så att host-os:et erbjuder x antal funktioner by default. Som t.ex DNS.
När man gör sådant skapar man också sårbarheter kopplat till dessa tjänster där applikationer kan komma åt host-os:et på t.ex ett lokalt interface. Men när man öppnar ett lokalt interface öppnar man också upp sig för andra brister som att t.ex man då måste ha koll på vad som bindar till det lokala interfacet.

Och det går också att blockera en hel del här men samtidigt så skeppas många leverantörer sina container-klusterlösningar eller sina applikationer med direkt dålig config by default.

Summeringen är väl att det går att göra rätt bra lösningar om man vet bristerna och problem.
Men många gör fel, så är det ett jobb i uppförsbacke.
I många av dessa usecases hade det dock by default varit klart säkrare med vanliga VMar.

(Än värre är det mer dessa kluster-apier dock som i t.ex openshift, k8s eller hos molnleverantörerna.
Där varje container får automatiskt api-nyckel för att prata in mot en central tjänst som i sin tur har access till flera andra containrar. Det är organisationer där ute fått hela sin organisation kapad genom sådant tyvärr.
Detta är dock kanske inte containrarnas isolering som är felet)

Skrivet av Yoshman:

Antar att du pratar om host-filsystemet ovan. Varför skulle en container överhuvudtaget ha någon access till det i normalfallet? Att tillåta det låter verkligen som en disaster waiting to happen...

Normalfallet är väl ändå att varje container har sitt helt privata filsystem + möjligen någon delad volym + eventuellt bind-mounts (och dessa ger access till host-filsystemet).

Och om man nu måste ge sådan access: om Docker services inte kör som root har containers ingen root-access till host-filsystemet med mindre än att det finns kernel-buggar.

Både host-filsystemet där man ibland delar access.
Jag kan inte ge argument till varför man gör så med hostfilsystemet.
Men jag kan garantera att det görs och det är gott om företag som levererar sina produkter på det viset.

Men det är även problem i privata filsystemet innuti containrar där t.ex webbservrar eller annat startar sin tjänst som "root". Och att den processen då har rättigheter att ändra sin egen konfiguration i sin runtime etc. Det är bara dålig hygien men återigen där så skeppas många container-configs på det viset redan från start.

Permalänk
Medlem
Skrivet av Yoshman:

Det går att köra 32-bit x86-kod sedan tidigare.

Däremot gissar jag att funktionen som erbjuds i Arm64EC är x86_64 only. Det lär inte vara ett stort problem, eventuell kvarvarande 32-bit kod borde inte vara prestandakritisk och då lär det fungera OK ändå.

Skrivet av medbor:

32-bit x86 har fungerat sedan första versionerna av windows för ARM

64-bit stöd (x86_64 och framåt) kom förra året och nu kan alla gamla program köras felfritt i windows på arm

Skrivet av Pulver:

Du har fått flera bra svar men kan bara flika in att det inte är alltid det fungerar ändå.

Jag har exempelvis testat 'Mullvad VPN' för Windows på min Surface Pro X som alltså är x86 och den installeras OK, men kan ändå inte ansluta till tjänsten.

Det kan säkert behövas en native ARM från Mullvad för att det ska fungera.

Tack för svar!
Blir allt bra sugen på att ge det ett försök.

Fungerar det bra så är jag inte främmande att köra ARM på stationära. Men då vill jag kräva lösa moderkort, CPU och liknande.

Visa signatur

JJ2 Multiplayer
JJ2 ZStats

[1] Ryzen 5800X | 5500XT | Kingston A2000 | Lenovo G24-10 144Hz [2] Ryzen 5700G | RX 480 | WD Blue SN550 [3] Ryzen 5600G | Kingston A2000 [4] Ryzen 3600 | GT 740 | 850 EVO [5] Ryzen 3600 | Geforce 405 | 850 EVO (alla är i bruk)

Permalänk
Medlem
Skrivet av maweric:

Tack för svar!
Blir allt bra sugen på att ge det ett försök.

Fungerar det bra så är jag inte främmande att köra ARM på stationära. Men då vill jag kräva lösa moderkort, CPU och liknande.

Socklade processorer för ARM är ovanliga tyvärr, men vi får hoppas det kommer. Gärna standardiserade interface för flera aktörer som det var förr med sockel 7 till exempel

Permalänk
Medlem

Jag kör inte ARM eftersom jag är helt ointresserad av MacOS, den dagen däremot som det finns för Windows-desktops så jag kan få en mindre, strömsnålare men ändå kraftfull arbets o spelburk hemma så är jag på!

Permalänk
Medlem
Skrivet av medbor:

Socklade processorer för ARM är ovanliga tyvärr, men vi får hoppas det kommer. Gärna standardiserade interface för flera aktörer som det var förr med sockel 7 till exempel

Det vore drömmen. Socket 7 är ett fint minne.

Visa signatur

JJ2 Multiplayer
JJ2 ZStats

[1] Ryzen 5800X | 5500XT | Kingston A2000 | Lenovo G24-10 144Hz [2] Ryzen 5700G | RX 480 | WD Blue SN550 [3] Ryzen 5600G | Kingston A2000 [4] Ryzen 3600 | GT 740 | 850 EVO [5] Ryzen 3600 | Geforce 405 | 850 EVO (alla är i bruk)

Permalänk
Medlem
Skrivet av Yoshman:

Vad betyder "hårdvarustödda virtuella maskiner" mer än att den isolering de erbjuder numera har olika former av HW-acceleration i kisel?

Hypervisors ("VMs") och OS-kärnor gör i grunden exakt samma sak: de hanterar resurser och erbjuder olika former av services till sina "applikationer", en av de viktigaste services man erbjuder är isolering från övriga "applikationer".

För en hypervisor är applikationerna OS-kärnor, för OS-kärnor är applikationer "vanliga" applikationer (user-land processer).

HW-stödet för isolering kommer primärt ned till MMU. Hypervisors har en MMU av MMUs, kärnor har en MMU.

Båda har buggar, både i programvara och definitivt även i HW (nu när AMD börjar få en relevant andel i datacenter börjar också antalet hittade HW-buggar ökar rejält, tyvärr lär samma gälla ARM64 men där finns ändå fundamentala fördelar i att det är en långt renare/enklare ISA).

Hypervisors och OS-kärnor har olika uppgifter. Om vi delar dator-HW i ett datacenter används naturligtvis en hypervisor för att ge oss en OS-kärna var.

Men som utvecklare/organisation, ge ett enda relevant use-case (utöver att man av någon anledning måste köra saker på olika OSes) där det finns en fördel med VMs över containers. Det man vill uppnå är separation mellan olika services, containers har en högre grad av isolation än "vanliga" applikationer och egentligen räcker det stöd OS:et ger, men av pakteringsmässiga och mer eller mindre dålig ingenjörskonst i programmeringdesign har det visat sig väldigt fördelaktigt att paketera services i "containers".

Själva containers/applikationer har aldrig behövt köras som root, däremot behövde docker-services:eb köras som det för att kunna göra sin "magi" mot Linux cgroups/namespaces.

Detta var ett problem som löstest i kärnan 2016 med cgroups v2 och som markerats "stabilt" i Docker sedan 2020, v20.10.

Värt att notera är att Docker-desktop (Windows/MacOS) aldrig behövt köras som root då man där kör QEMU under huven då containers faktiskt kör Linux.

Edit: och att man alltid kan köra som "root" i containers är ju inget problem. Detta är ju en funktion hos Linux namespaces där både PIDs (via PID namespace) och användare (via USER namespace) har ett värde inuti container, men har något annat på "host" (så root i container kan vara vilken användare som helst på host).

VM:ar är mer isolerade från varandra än vad containers är, och därmed generellt besvärligare att bryta sig ut ur, och det var just isoleringsargumentet jag ställde mig frågande till. Vid behov att isolera så mycket som möjligt, utan att köra med flera fysiska maskiner, så är ju rimligen VM:ar att föredra framför containers.

Hade för mig att virtualiseringsstödet i hårdvara involverade mer än bara acceleration, och att det även hade med isolering att göra?

Något av detta strulade med root-fri Docker för mig (i en Linuxmaskin): Docker - Rootless mode - Known limitations

(Jag kör för övrigt inte Docker Desktop i Windows pga att det kräver påslaget Hyper-V, vilket i praktiken sänker prestandan i soporna för både VirtualBox och VMware Workstation då de måste köras nästlat, och jag orkar inte starta om Windows varje gång jag skulle behöva toggla Hyper-V.)

Visa signatur

9950X3D | 5080