Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?

Kurz: Java stürzt ab unter macOS 14.4 +++ Vision Pro App Store im Browser

Das Update auf macOS 14.4 brachte eine Veränderung, mit der Java-Applikationen derzeit zu kämpfen haben: Ihre Prozesse werden auf Macs mit M-Chips unerwartet beendet. Das gilt für alle Versionen, von Java 8 bis 22, schreibt Aurelio Garcia-Ribeyro, Leiter des Produkt-Managements bei Oracle. Die Ursache liege in einer veränderten Handhabung von Zugriffen auf geschützte Speicherregionen beim Just-in-time-Kompilieren. Da diese in den Beta-Versionen von macOS 14.4 nicht vorhanden war, wurden die Entwickler der JavaSDKs davon überrascht. Bisher, so beschreibt es Garcia-Ribeyro, habe der macOS-Kernel auf Speicherzugriffe in geschützten Bereichen in bestimmten Situationen mit "SIGBUS" oder "SIGSEGV" reagiert. Darauf konnten Entwickler reagieren, das Signal auslesen und ihren Code anpassen. macOS 14.4 sende stattdessen "SIGKILL" und beende den Prozess ohne weiteres Federlesen.


Wer das Java-SDK nutze, solle mit der Aktualisierung warten, empfiehlt der Oracle-Produktmanager. Ein Downgrade ist nicht möglich, wenn macOS 14 einmal installiert ist – Apple signiert Version 14.3.1 nicht mehr. Eventuell können sich Java-Entwickler mit Apple-Silicon-Mac darüber behelfen, indem sie macOS 13 in einer Virtuellen Maschine betreiben, um darin ihr Java-SDK zu installieren. macOS 14.4 behob unter anderem dutzende Sicherheitslücken, darunter drei, die den Kernel betrafen.

Außerdem berichten Nutzer von Audio-Plug-ins davon, dass ihnen das Update auf macOS 14.4 Probleme bereite. Der Hersteller iZotope bestätigt dies und sieht einen Zusammenhang mit Kopierschutz – betroffen sind Erweiterungen, die mit PACE oder iLok gesichert werden.

Vision Pro App Store im Browser
Das neueste Softwaregeschäft von Apple können Anwender fortan ohne Vision Pro betrachten. Unter https://apps.apple.com/us/vision erreicht man das Softwareangebot für Apples Spatial-Computing-Headset mit herkömmlichen Browsern. Das responsive Layout passt sich an die Fensterbreite an, lässt sich also auf dem iPhone ebenso gut durchstöbern wie auf einem iPad oder Mac (oder Windows-PC). Bisher teilt sich das Angebot in zwei Kategorien: "Apps & Games" sowie "Arcade" – damit ist der Abodienst "Apple Arcade" gemeint. Erwartungsgemäß sind sämtliche Beschreibungen auf Englisch. Die verschiedenen Listen ("What's new this week", "What's Hot", "Best Apps for Vision Pro") ergänzen Stories, in denen die App-Store-Redaktion einzelne Apps oder Entwickler vorstellt oder themenspezifische Sammlungen präsentiert – wie bereits von anderen Plattformen bekannt.

Im Browser gleicht der App Store für VisionOS den Web-Versionen anderer Plattformen.

Kommentare

Nebula
Nebula18.03.24 21:14
Warum sollte ein Programm auf geschützten Speicher zugreifen, wenn nicht aus bösen Absichten oder zum Debugging auf Systemebene?
»Wir werden alle sterben« – Albert Einstein
-5
Deppomat18.03.24 21:37
Irgs. Izotope gehört ja mittlerweile zu Native Instruments... ob deren Sachen auch betroffen sind?
0
cfkane18.03.24 21:45
Nebula
Warum sollte ein Programm auf geschützten Speicher zugreifen, wenn nicht aus bösen Absichten oder zum Debugging auf Systemebene?
Das wurde ein wenig im Heise-Forum diskutiert. Hier einige mögliche Antworten (deren Richtigkeit ich aber nicht einschätzen kann).


+4
ssb
ssb18.03.24 22:22
Da hatte ich noch mal Glück gehabt - eine Java-Anwendung die ich regelmäßig verwenden muss läuft weiterhin - nur das Bild im Splash-Screen wird nach ein paar Sekunden horizontal gespiegelt - aber das stört nicht weiter.
0
Colonel Panic
Colonel Panic18.03.24 22:24
Anscheinend hat Apple das wirklich zwischen RC und Release noch geändert und nicht wirklich kommuniziert. So schreiben es auch die Leute von Jetbrains, einem bekannten Hersteller von IDEs, deren Produkte alle auf Java basieren:

PS: Kleiner Tippfehler im Artikel, das Signal heißt SIGSEGV
+4
immo_j19.03.24 00:09
Colonel Panic
PS: Kleiner Tippfehler im Artikel, das Signal heißt SIGSEGV
Danke, ist repariert!
0
Zikade
Zikade19.03.24 07:19
Tatsächlich war die Änderung, welche Java betrifft, bereits in 14.4 Beta 4 vorhanden. Was zwar nicht viel weiterhilft für die Anwendungen die es betrifft, aer immerhin der Vollständigkeit halber.
+1
KongoOtto
KongoOtto19.03.24 07:53
Ich benutze GoLand und Rider von Jetbrains, mir ist aber noch keine "Absonderlichkeit" aufgefallen.
0
ssb
ssb19.03.24 07:57
Nun, ich vermute, dass es sich hier ebenfalls um eine Sicherheitsmaßnahme handelt.
Dem SIGSEGV geht ja eine „Segmentation Fault“ Exception voraus und dem SIGBUS eine „Bus Error“ Exception. Das sind im Allgemeinen Zugriffe auf nicht allokierte (Bus Error) oder geschützte (Segmentation Fault) Speicherbereiche - die normalerweise gar nicht erst auftreten sollten und im Allgemeinen auf „schlechten“ Code hinweise. In C typischerweise Zugriff auf einen NULL-Pointer. (Daher haben native Anwendungen immer eine „PAGEZERO“, die bei 64-Bit 4 GB groß ist - Zugriff auf diese unteren 4 GB führen so zu einem Segementation Fault).

Nun gibt es aber gerne die Methode, auf solche Fehler nicht zu testen („if prt == NULL“) und mit einem Fehlerstatus zurückzukehren sondern statt dessen in der aufrufenden Funktion per (Software-)Exceptions solche Fehler zu fangen („try … catch“). In manchen Programmiersprachen (Java) ist das sogar der übliche Weg (weil es eigentlich keine Pointer gibt).

Das führt dazu, dass Anwendungen darauf beruhen, dass Exceptions (oder Signals) ausgelöst und abgefangen werden. So hat man Programme, die zwar nicht immer das tun, was sie sollen, aber nicht abstürzen.

Nun ist es aber so, dass man eben auch programmatisch Signale und Exceptions fangen kann. Aber gerade bei Exceptions wird der Exception Handler dann im Kernel-Kontext ausgeführt und kann da wirklich allerhand Schindluder treiben. Ist eigentlich dafür gedacht, dass ein Exception Handler die Ursache „heilen“ kann. So funktioniert zum Beispiel auf der Page-Fault, wenn eine Speicherseite ausgelagert (oder komprimiert) wurde. Der Kernel fängt diese Exception, stellt die Speicherseite wieder her und übergibt die Kontrolle wieder an das Programm.

Ich kann mir vorstellen, dass versucht wurde mit Exception-Handlern eben solchen Schidnluder zu treiben um zum Beispiel in fremden Prozessen Speicherbereiche anzulegen, dort Code einzuzschleusen und diesen dann in einem Thread auszuführen. Selbstverständlich hat der Kernel schon Sicherheitsmaßnahmen dagegen, ganz so einfach ist es nicht. Aber es ist möglich - ich hatte damit vor ein paar Jahren experimentiert.

Eventuell gab es jetzt einen Exploit, der die bestehenden Sicherheitsmaßnahmen umgehen konnte und als sicherste Methode, dem Vorzubeugen, hat Apple entschieden, dass in solchen Fällen der Fallback-Exception Handler im System (falls weder Threads noch Tasks Exceptions behandeln) anstelle von SIGSEGV und SIGBUS jetzt einen SIGKILL auslöst, den man auch mit sigmask() nicht unterdrücken kann.

Java ist da also gar nicht unbedingt die Ursache, sondern leidet nur unter den Folgen der Entscheidung. Eventuell müsste die VM anstelle von Signals dann Exception-Handler verwenden, was den Code der VM weniger portabel macht.
+7
Peter Eckel19.03.24 08:58
Nebula
Warum sollte ein Programm auf geschützten Speicher zugreifen, wenn nicht aus bösen Absichten oder zum Debugging auf Systemebene?
Inkompetenz

Die meisten Zugriffe außerhalb des vorgesehenen und reservierten Speicherbereichs passieren schlicht und einfach infolge von Bugs und der Benutzung nicht speichersicherer Programmiersprachen wie C und C++. Wie es mit Java aussieht, weiß ich nicht, um die Sprache mache ich ohnehin einen Bogen, aber es kann gut sein, daß das JDK auch in C bzw. C++ geschrieben ist.
Ceterum censeo librum facierum esse delendum.
+1
ssb
ssb19.03.24 11:57
Peter Eckel
Nebula
Warum sollte ein Programm auf geschützten Speicher zugreifen, wenn nicht aus bösen Absichten oder zum Debugging auf Systemebene?
Inkompetenz

Die meisten Zugriffe außerhalb des vorgesehenen und reservierten Speicherbereichs passieren schlicht und einfach infolge von Bugs und der Benutzung nicht speichersicherer Programmiersprachen wie C und C++. Wie es mit Java aussieht, weiß ich nicht, um die Sprache mache ich ohnehin einen Bogen, aber es kann gut sein, daß das JDK auch in C bzw. C++ geschrieben ist.
Wie ich versucht habe zu erklären, ist es unter Umständen gar ncht mal die Inkompetenz der Anwendungsentwickler, sondern ein Design-Problem des verwendeten Frameworks. So wie ich es bisher verstanden habe, betrifft das wohl nur bestimmte - aber häufig verwendete - Java Frameworks und selbst scheinen nicht alle Anwendungen betroffen zu sein.

Wie gesagt, in C/C++/ObjC sollte man halt Pointer immer prüfen, bevor man sie verwendet (dafür gibt es dann auch Static Code Analyzer und Address Sanitizer). Da Java am Ende auch nativen Code ausführt, kann es an der Stelle Probleme machen.

Hat schon mal jemand mit Problemen versucht, ob die Anwendung dann mit einer Intel-VM via Rosetta läuft? Rosetta hat ja einen eigenen JIT-Modus, der vielleicht davon gar nicht betroffen ist.
+1

Kommentieren

Sie müssen sich einloggen, um die News kommentieren zu können.