Künstliche Intelligenz
C-Libraries in Java nutzen 3: Komplexe Anwendung, Fallstricke und Best Practices
Javas Foreign Function & Memory API (FFM) dient dazu, auf Code in einer Shared Library beziehungsweise DLL zuzugreifen, der in einer Programmiersprache wie C oder Rust geschrieben ist. Allerdings muss der Code dazu einige Voraussetzungen erfüllen.
Weiterlesen nach der Anzeige

Rudolf Ziegaus ist Software-Entwickler, Java-Trainer und Geschäftsführer der IO Software GmbH. Seine Lieblingsthemen sind PKi, Kryptographie und systemnahe Programmierung.
Diese dreiteilige Artikelserie zeigt anhand einer in C geschriebenen Demo-Library, wie eine Java-Anwendung die Funktionen der Bibliothek aufruft, welche Vorbereitungen erforderlich sind und welche Regeln zu beachten sind.
Nachdem die ersten beiden Teile die wichtigsten Begriffe und Techniken beim Zugriff von Java auf nativen Code via der FFM-API gezeigt haben, behandelt dieser dritte und letzte Teil einige Spezialitäten, die zu beachten sind.
Segmente mit Slicing zuschneiden
Es gibt Anwendungen, die nicht das vollständige MemorySegment benutzen sollen, sondern nur einen Teil davon – beispielsweise wenn sie eine Liste übergeben bekommen, aber nur Teile davon benötigen. Dann ist es praktisch, wenn man nicht immer auf das komplette Array zugreifen muss, sondern sich eine Art View über den Speicherbereich legen kann – genau das leistet die Methode asSlice. Sie schneidet einen Bereich aus dem Segment aus und liefert ein neues Segment für diesen Bereich.
Wenn etwa ein MemorySegment 64 Byte lang ist, ließen sich folgendermaßen die letzten 16 Byte davon abrufen:
Weiterlesen nach der Anzeige
MemorySegment segment = arena.allocate(64);
MemorySegment info = segment.asSlice(48, 16);
segment enthält hier den gesamten Speicherbereich. Die Methode asSlice() schneidet die 16 Bytes ab Position 48 heraus.
Die Daten werden dabei aber nicht kopiert, sondern es entsteht eine View über den ausgewählten Bereich. Wenn sich der Inhalt des Bereichs ändert (im Beispiel der Bereich info), dann ändert sich auch der Originalspeicherbereich segment.
Die Länge des Segments
Ein Problem entsteht, wenn das Segment eine falsche Länge hat – mit reinterpret kann man die Länge des Segmentes neu festlegen. In manchen Fällen kann es vorkommen, dass das Segment mit der Länge 0 zurückgegeben wird, beispielsweise, wenn die native Funktion einen void*-Pointer zurückgibt. Ein Zugriff auf das Segment würde eine ArrayIndexOutOfBoundException auslösen. Daher muss man zunächst das Segment auf die richtige Länge setzen, was voraussetzt, dass sie bekannt ist.
Für folgendes Beispiel liefert die native Funktion getMemory() einen void*-Pointer auf einen Speicherbereich zurück. Außerdem ist bekannt, dass der Speicherbereich 100 Byte groß ist. Dann kann man folgendermaßen auf das Ergebnis zugreifen:
MemorySegment segment = (MemorySegment) method.invoke();
MemorySegment value = segment.reinterpret(100);
String result = value.getString(0);
System.out.println("Result getMemory:" + result);
Typinfos zur Laufzeit
Oft ist unklar, wie viele Byte ein Datentyp in C auf einer bestimmten Plattform belegt. Der folgende Code ruft die Größe des Datentyps auf der verwendeten Plattform ab. Der Code ermittelt alle unterstützten Datentypen und zeigt die benötigte Größe in Bytes und das Alignment für den Datentyp long an:
public void printTypeInfos()
{
Map typeInfos = linker.canonicalLayouts();
System.out.println("Canonical layout keys: " +
typeInfos.keySet());
printTypeInfo(typeInfos, "long");
}
private void printTypeInfo(Map typeInfos,
String type)
{
MemoryLayout typeLayout = typeInfos.get(type);
if (typeLayout != null)
{
System.out.println("C '" + type + "' layout: " + typeLayout +
", size=" + typeLayout.byteSize() + ",
align=" + typeLayout.byteAlignment());
}
else
{
System.out.println("Datentyp“ + type + " nicht in“ +
„canonicalLayouts() enthalten");
}
}
Plattformunabhängig entwickeln
Wer eine Library auf mehreren Betriebssystemen plattformübergreifend nutzen möchte, sollte zunächst mit einem Betriebssystem beginnen und nach dem erfolgreichen Einsatz prüfen, ob die genutzten Funktionen sich auch unter den anderen Betriebssystemen problemlos verwenden lassen.
Ich musste beispielsweise bei meinem Projekt zum Zugriff auf das Hardware-Sicherheitsmodul (HSM) feststellen, dass die Portabilität zum Teil sehr problematisch ist, da sie von den verfügbaren Treibern und Shared Libraries abhängt. So war ein Zugriff auf ein HSM via opensc unter Linux kein Problem, während sich unter Windows einige Funktionen gar nicht nutzen ließen, sondern eine Access Violation in der JVM hervorriefen.
Falls es deutliche Unterschiede zwischen den Plattformen gibt, ist ein Weg, die Funktionen in einer gemeinsamen Basisklasse zu abstrahieren und dann in abgeleiteten Klassen für jede Plattform unterschiedlich zu gestalten.
Mögliche Probleme beim plattformübergreifenden Zugriff sind
- unterschiedliche Größen der Datentypen,
- unterschiedliche Größen von Strukturen,
- unterschiedliches Alignment der Elemente in einer Struktur.
In diesem Fall ist der Zugriff auf den Sourcecode der Shared Library hilfreich. Sollte er nicht möglich sein, lassen sich bestimmte Informationen über die Größe der Datentypen auf der Zielplattform mithilfe der Methode printTypeInfos() ermitteln.
Best Practices
Während meiner Arbeit mit der Foreign Function & Memory API haben sich einige Best Practices herauskristallisiert. So ist es sinnvoll, zunächst mit einfachen Libraries und einfachen Funktionen anzufangen, bevor man sich an größere Libraries beziehungsweise komplexere Funktionen wagt.
Sinnvoll ist es Throwable abzufangen und in eigene Exceptions umzuwandeln, die von RuntimeException abgeleitet sind.
Wer die gleichen Funktionen aus der Library mehrfach benötigt, sollte Method-Handles in einer Map cachen, um nicht immer wieder dieselben Infos abrufen zu müssen. Strukturen sollte man immer per Adresse (ValueLayout.ADDRESS) übergeben und die Strukturen als eigene Klasse mappen, damit der Code übersichtlich bleibt.
Wenn Anwendungen Speicherbereiche allokieren müssen, sollte die Arena dafür möglichst weit oben in der Hierarchie stehen, und die Anwendung sollte die Arena mit try-with-resources erzeugen, damit die Freigabe des Speichers automatisch erfolgen kann.
Das Tool jextract sollte man besser meiden. Eine manuelle Implementierung ist einfacher zu verstehen und vor allem auch zu warten.
Wer den Sourcecode der Shared Library unter Kontrolle hat, sollte auf Datentypen wie int32_t und int64_t setzen, damit klar ist, wie viel Byte sie jeweils belegen.
Für größere Projekte kann es empfehlenswert sein, einen Basis-Layer für den Zugriff auf die C-Funktionen zu implementieren und in einem weiteren Layer die Zugriffschicht für Java draufzusetzen, die keinerlei FFM-spezifische Details mehr enthalten sollte. Bei sehr umfangreichen Projekten empfiehlt sich eine zusätzliche Komfortschicht, die die wichtigsten Use Cases kapselt.
Checkliste bei Fehlern
Bei der Suche nach Fehlerursachen im Zusammenspiel zwischen Java und C mit der Foreign Function & Memory API helfen ein paar Fragen:
- Ist der richtige Library-Pfad angegeben?
- Ist es die richtige Shared Library (32 Bit oder 64 Bit)?
- Lässt sich die Shared Library überhaupt laden?
- Stimmen die Funktionsnamen?
- Stimmen die Parameter (Anzahl und Datentypen) und der Rückgabewert überein?
- Bei den Datentypen: Stimmen die Größen überein? Insbesondere der Datentyp
longin C ist kritisch, da sich die Größe auf verschiedenen Plattformen unterscheidet – in Windows müssen Anwendungen ihn alsJAVA_INTbehandeln, unter Linux dagegen alsValueLayout.JAVA_LONG.
Künstliche Intelligenz
Schweizer Militär verlässt Microsoft-Cloud | heise online
Die Schweizer Armee vollzieht in ihrer IT-Infrastruktur eine Kehrtwende. Die Cybersicherheitsexperten der Schweizer Streitkräfte – allen voran das „Kommando Cyber“ und die Untereinheit für Cyber- und elektromagnetische Aktionen (CEA) – kehren dem Softwareriesen Microsoft den Rücken. Bis zum Oktober sollen sämtliche Mitarbeiter dieser Einheiten an ihren Arbeitsplätzen mit der quelloffenen Alternative OpenDesk ausgestattet werden. Der ambitionierte Fahrplan zeigt, wie akut der Handlungsbedarf in der Alpenrepublik eingeschätzt wird.
Weiterlesen nach der Anzeige
Hintergrund dieses Schrittes ist laut dem Magazin Republik ein Strategiewechsel bei Microsoft. Zwar kooperiert die Schweiz schon lange mit dem US-Konzern. Doch bislang blieben sensible behördliche Daten in den eigenen, staatlichen Rechenzentren. Nun zwingt der Gigant Kunden aber zunehmend in die eigene Cloud-Infrastruktur. E-Mails, Dokumente, Kalenderdaten oder Videokonferenzen lassen sich künftig nur noch über die Server des US-Unternehmens abrufen. Für die Schweizer Armee, deren operative Daten zu großen Teilen als streng geheim klassifiziert sind, ist das ein unkalkulierbares Sicherheitsrisiko.
Cloud-Zwang und geopolitische Risiken
Die eidgenössischen Militärs befürchten dem Bericht zufolge, dass sensible militärische Informationen über diesen Umweg letztlich in die Hände der US-Regierung gelangen könnten. Der Chef des Kommandos Cyber, Simon Müller, gibt zu bedenken, dass Microsofts cloudbasiertes Office-Paket 365 für eine Armee mit höchsten Ansprüchen an Vertraulichkeit, Verfügbarkeit und Integrität nicht geeignet sei. Solange Konzerne Gesetzen wie dem US Cloud Act unterlägen, seien sie für gewisse militärische Kontexte nicht nutzbar. Die Sorge vor versteckten Datenabflüssen an ausländische Geheimdienste wie die NSA wiegt schwer.
Brisanz erhält das Thema durch die aktuelle geopolitische Lage, in der digitale Infrastrukturen zunehmend als geopolitische Waffen instrumentalisiert werden. Jüngste Beispiele zeigen, wie rigoros die US-Regierung Tech-Konzerne an der Leine hält. So ordnete die US-Administration temporär Verkaufsverbote für bestimmte KI-Modelle ins Ausland an und zwang Microsoft zur Herausgabe des E-Mail-Verkehrs niederländischer Regierungsbeamter.
Besonders drastisch war die Deaktivierung der Nutzerkonten von Richtern des Internationalen Strafgerichtshofs nach US-Sanktionen. Diese Beispiele schüren in Europa die Angst vor einer willkürlichen Stilllegung von Programmen oder Systemen durch einen „Kill Switch“ oder aggressiven Lizenzkostenstrategien.
Vormarsch von OpenDesk und LibreOffice
Weiterlesen nach der Anzeige
Mit OpenDesk greift das Schweizer Militär auf ein Softwarepaket zurück, das vom deutschen Zentrum für Digitale Souveränität (Zendis) entwickelt wird und eine quelloffene Alternative zu MS 365 darstellt. Die Relevanz solcher Lösungen wächst im gesamten deutschsprachigen Raum. So migriert etwa das österreichische Bundesheer auf LibreOffice. Das IT-Systemhaus der Bundeswehr BWI schloss derweil mit Zendis einen Rahmenvertrag über souveräne Kommunikations- und Kollaborationssoftware wie OpenDesk. Die Suite soll sich zudem im öffentlichen Gesundheitsdienst und bei Sozialversicherern beweisen.
Die Schweiz macht sich bereits seit Längerem für digitale Souveränität stark. Ein seit Anfang 2024 geltendes Gesetz verpflichtet den Bund, den Quellcode von eigens entwickelter Behördensoftware offenzulegen. Das soll Abhängigkeiten von einzelnen Softwareherstellern verringern und für Transparenz sorgen. Die Armee hatte das Parlament eigentlich aus Sicherheitsgründen von dieser Pflicht ausgenommen. Das Cyberkommando unterwirft sich aber nun freiwillig dieser Open-Source-Linie.
Technische Hürden und die digitale Allmende
Untersuchungen der zivilen Verwaltung in Zürich haben zwar ergeben, dass OpenDesk wegen fehlender Desktop-Apps, mangelnder Telefonie-Integration und unklarer Migrationskosten im normalen Büroalltag noch Defizite aufweise. Die IT-affinen Cyberspezialisten der Armee betrifft das aber kaum. Sie betreiben die Software autark in eigenen Rechenzentren und können selbst Anpassungen vornehmen.
Zudem engagiert sich die Armee als „Swiss Defense Forces“ auf Entwicklerplattformen wie Gitlab, reicht Verbesserungen zur Kryptografie ein und hat mit Loom bereits eine eigene Open-Source-Dokumentensuchmaschine veröffentlicht. Es geht laut den Verantwortlichen darum, nicht nur Konsument der digitalen Allmende zu sein, sondern auch aktiv etwas an die Community zurückgeben.
(nen)
Künstliche Intelligenz
Bild-KI in WhatsApp und Instagram ausprobiert: Das kann Muse Image
Metas neue Bilderstellungs-KI hat auf einen Schlag Milliarden an potenziellen Nutzern. Denn im Juli 2026 veröffentlichte der US-Konzern mit Muse Image sein neuestes Modell direkt in WhatsApp und Instagram. Wahrscheinlich ist Muse Image sogar auf Ihrem Smartphone nur eine Wischgeste entfernt.
Die neuen Funktionen sind gut versteckt. Wer einen Status in WhatsApp oder eine Story auf Instagram veröffentlicht, kann diese nun per KI bearbeiten. Vorgefertigte Effekte sollen Selfies mehr Stil verleihen, sofern Sie nicht selbst prompten wollen. Oder Sie generieren direkt ein ganz neues Bild, statt echte Urlaubserinnerungen zu posten.
- Muse Image ist das erste Bildmodell von Metas neuer KI-Abteilung Superintelligence Labs und wurde am 7. Juli 2026 veröffentlicht.
- Nutzer aus Deutschland greifen direkt über WhatsApp oder Instagram auf die neuen Funktionen zu, um Bilder zu verändern oder zu erstellen.
- Der Gratis-Spaß hat Grenzen: Ist das Tageslimit aufgebraucht, bringt Sie auch ein bezahltes Abo nicht weiter.
Wir haben die neuen generativen Funktionen in WhatsApp, Instagram und Metas AI-App angeschaut. Dieser Ratgeber erklärt, wo Sie die Funktionen finden, was damit möglich ist und an welchen Stellen Meta seinen Nutzern Grenzen setzt. Sie haben gar keine Lust auf KI? Dann folgen Sie unserer Anleitung, um der Verwendung Ihrer Fotos zum Training von Metas KI zu widersprechen.
Das war die Leseprobe unseres heise-Plus-Artikels „Bild-KI in WhatsApp und Instagram ausprobiert: Das kann Muse Image“.
Mit einem heise-Plus-Abo können Sie den ganzen Artikel lesen.
Künstliche Intelligenz
Kundendaten bei Dienstleister abgeflossen: Datenschutzvorfall beim Lidl-Shop
Beim Discounter Lidl gab es einen Datenschutzvorfall. Das teilte das Unternehmen betroffenen Kunden mit. Unbefugte konnten sich bei einem Shop-Dienstleister Zugang zu einer Datei mit Kundendaten verschaffen und haben diese abgezogen. Lidl hat die zuständige Datenschutzbehörde informiert. Wer hinter dem Angriff steckt, ist unklar.
Weiterlesen nach der Anzeige
Die Angreifer entwendeten Anrede, Vor- und Nachname, Telefonnummer, E-Mail-Adresse, Geburtsdatum und Kundennummer der betroffenen Kunden. Wie ein Sprecher uns auf Nachfrage mitteilte, sind weder Postanschriften noch Passwörter oder Zahlungsinformationen betroffen. Die Kundenkonten wurden nicht kompromittiert, stellt der Sprecher weiterhin fest.

Datenschutzvorfall bei Lidl
Behörden sind informiert
Der Angriff traf nicht die zentrale Datenbank des Shopsystems, sondern einen IT-Dienstleister des Handelskonzerns. Dieser habe sofort reagiert und „die erforderlichen Maßnahmen getroffen, um die IT-Systeme wieder vollständig abzusichern“, so die Sprecherin. Außerdem habe der Dienstleister Strafanzeige gestellt.
Hinweise auf einen Missbrauch der Daten gebe es keine, heißt es in der uns vorliegenden E-Mail. Dennoch sollen Betroffene wachsam gegenüber Phishing und Identitätsmissbrauch sein, empfiehlt Lidl.
Lidl gehört ebenso zur Schwarz-Gruppe wie der Cloud-Anbieter Schwarz Digits und das Sicherheitsunternehmen XM Cyber.
Weiterlesen nach der Anzeige
(cku)
-
Künstliche Intelligenzvor 3 Monaten„Don’t Starve Elsewhere“: Survival‑Hit kehrt nach zehn Jahren zurück
-
Künstliche Intelligenzvor 3 Monaten
xTool P3 im Test: CO₂-Laser mit 80 Watt schneidet und graviert auch Acryl
-
Künstliche Intelligenzvor 3 MonatenWeitere Entlassungswelle bei Disney: Bis zu 1000 Mitarbeiter betroffen
-
Apps & Mobile Entwicklungvor 3 MonatenMega-GPUs für Nvidia, AMD & Co: TSMC zeigt CoWoS-Package mit >11.600 mm² & 24 × HBM5E
-
UX/UI & Webdesignvor 4 TagenRegional & mit Gefühl: Identity für Klimafonds Baden-Württemberg › PAGE online
-
Social Mediavor 2 MonatenMetas neuer Creative Setup Workflow: Was sich wirklich ändert – und warum das nicht nur eine UI-Frage ist!
-
Künstliche Intelligenzvor 3 MonatenApple‑Geräte mit Microsoft Intune verwalten – zweiteiliges Live-Webinar
-
Entwicklung & Codevor 2 MonatenKommentar: Das Ende der SaaS-Gelddruckmaschine
