Connect with us

Künstliche Intelligenz

C-Libraries in Java nutzen 2: Funktionen mit veränderlichen Parametern


close notice

This article is also available in
English.

It was translated with technical assistance and editorially reviewed before publication.

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. 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.

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.

Nachdem der erste Teil gezeigt hat, wie man in Java eine in C geschriebene Shared Library lädt und einfache Funktionen dieser Shared Library aufruft, geht es jetzt um komplexere Szenarien. Er zeigt, wie man aus Java Funktionen mit veränderbaren Parametern aufrufen und Arrays sowie Strukturen übergeben kann.

Die bisherigen Beispiele haben die Aufrufe der nativen Funktionen einfach gehalten. Die Java-Anwendung hat lediglich Parameter durchgereicht und den Rückgabewert übernommen.

Anders sieht es bei den nächsten Beispielen aus. Als erstes folgt die einfache C-Funktion getVersion2, die wie die Funktion getVersion aus Teil 1 die Version der Library ermittelt. Die neue Funktion gibt die Versionsnummer aber nicht als Wert zurück, sondern verändert dazu einen Parameter. Das funktioniert in C, indem eine Anwendung für einen Parameter nicht den Wert selbst, sondern dessen Adresse übergibt (Call by Reference). Dieses Konstrukt sieht in C folgendermaßen aus:


EXPORT void   getVersion2(int* version);


Folgender Java-Code ruft die Funktion auf:

Weiterlesen nach der Anzeige


int version;
getVersion2(&version);


Das & kennzeichnet in C, dass die Funktion die Adresse der Variablen nutzt. Java erlaubt das Vorgehen nicht, sodass ein Rückgabewert unerlässlich ist. Folgende Java-Methode verwendet die C-Funktion mit Referenz:


public int getVersion2() throws Throwable
{
  MethodHandle method = getMethodHandle("getVersion2",   
     FunctionDescriptor.of(
				ValueLayout.JAVA_INT, 
				ValueLayout.ADDRESS
				));
  try (Arena arena = Arena.ofConfined())
  {
    MemorySegment versionSeg =   
      arena.allocate(ValueLayout.JAVA_INT.byteSize());
    method.invoke(versionSeg);
    int version = versionSeg.get(ValueLayout.JAVA_INT, 0);
    return version;
  }
}


Zuerst ruft der Code wie im ersten Teil der Serie wieder die Methode getMethodHandle() auf. Der Aufruf definiert den FunctionDescriptor für die Funktion getVersion2().

Die Angabe ValueLayout.ADDRESS für den Parameter zeigt an, dass die C-Funktion eine Adresse erwartet.

Jetzt kommt der spannendere Teil: Um eine Adresse übergeben zu können, muss die Java-Anwendung mittels der FFM-API einen Speicherbereich von vier Byte (für den Datentyp int) reservieren. Das geschieht mit einer Arena, die er erste Teil bereits erläutert hat. Das Erzeugen der Arena mit dem try-with-ressources-Statement stellt sicher, dass die Arena nach dem try-Block automatisch geschlossen und der darin verwaltete Speicher automatisch freigegeben wird. Es gibt verschiedene Typen von Arenas – die im Beispiel über ofConfined erzeugte sorgt dafür, dass die Anwendung nur auf Speicher des aktuellen Thread zugreifen kann. Eine mit ofConfined() erzeugte Arena – beziehungsweise der damit allozierte Speicher – ist daher nicht threadsicher.

Als nächstes gilt es, den erforderlichen Speicherbereich für den Parameter version zu allokieren. Dafür besitzt die Arena die Methode allocate(). Die Größe des benötigten Speichers kann man durch die Funktion byteSize() für die Variable ermitteln. Hier sei nochmals darauf hingewiesen, dass der Wert die Größe des Java-Datentyps darstellt und nicht zwingend etwas über den C-Datentyp aussagt. Da die C-Funktion einen int-Parameter entgegennimmt, sind wir auf der sicheren Seite, da int in C stets vier Byte umfasst. Bei einem long-Wert in C hängt die Größe dagegen von der Plattform ab.

Der Speicherbereich wird durch ein MemorySegment dargestellt, das beim Aufruf der Methode invoke an die C-Funktion weitergereicht werden muss.

Anschließend kann die Anwendung das Ergebnis auslesen. Dazu ruft sie auf dem MemorySegment die Funktion get auf und übergibt ihr das Layout des Speichers (in diesem Fall ein JAVA_INT) und den Offset zum Lesen aus dem MemorySegment. Für das Beispiel ist der Offset null. Durch die Angabe JAVA_INT gibt die Funktion einen int-Wert zurück, den die Anwendung weiterverarbeiten kann.

Die nächste Aufgabe baut auf dem Vorgehen auf, verarbeitet aber nicht nur einen Wert, sondern ermittelt den Durchschnitt aus einer Liste von int-Werten. Dazu muss sie der nativen Funktion ein Array von int-Werten übergeben:


public double calcAverage(int [] values) throws Throwable
{
  MethodHandle calcAverage =  
     getMethodHandle("calcAverage"),
	    FunctionDescriptor.of(
	    ValueLayout.JAVA_DOUBLE,     // return value 
	    ValueLayout.ADDRESS,         // data values 
	    ValueLayout.JAVA_INT));      // number of elements

  try(Arena arena = Arena.ofConfined())  
  {
    long totalSize = ValueLayout.JAVA_INT.byteSize() * values.length;
    MemorySegment valueSegment = arena.allocate(totalSize);
    for (int i = 0; i < values.length; i++) 
    {
      valueSegment.setAtIndex(ValueLayout.JAVA_INT, i, values[i]); 
    }
    double result = (double) calcAverage.invoke(valueSegment, 
                                                values.length);
    return result;
  }
}


Zunächst berechnet der Code die gesamte Speichergröße des Arrays (totalSize) und reserviert den benötigten Speicher mit allocate(). Anschließend belegt der Code den Speicher mit der Methode setAtIndex für das jeweilige MemorySegment. Der Aufruf erfolgt für jedes Element des Arrays.

Schließlich ruft der Code die Methode invoke für den MethodHandle auf und übergibt ihr als Parameter das Array und dessen Länge. Schließlich gibt sie das Ergebnis der C-Funktion zurück.



Source link

Künstliche Intelligenz

Trump: Wenn Digitalsteuer, dann 100 Prozent höhere Zölle


US-Präsident Donald Trump droht europäischen Ländern mit neuen Zöllen in Höhe von 100 Prozent, sollten sie Digitalsteuern beschließen. Die Zölle würden an die Stelle vereinbarter Zollabkommen treten, schrieb Trump auf der Plattform Truth Social. Das gelte unabhängig davon, ob die Abkommen bereits umgesetzt oder unterschrieben seien. Die neuen Zölle würden auf sämtliche Waren erhoben, die in die USA exportiert werden, schrieb Trump weiter.

Weiterlesen nach der Anzeige

Sein Vorgehen begründete er damit, dass einige Länder kurz davor seien, Digitalabgaben zu beschließen, die amerikanische Konzerne treffen würden. Konkrete Länder nannte der Präsident nicht. Sollten solche Zölle kommen, will die EU das laut einem Sprecher der Kommission nicht einfach hinnehmen.

Auch in Deutschland gab es in der Vergangenheit immer wieder Pläne für eine Digitalabgabe für große Internetkonzerne. So warb der parteilose Medienstaatsminister Wolfram Weimer schon seit längerem für eine Abgabe, damit Google und andere Konzerne einen Anteil ihrer Erlöse abgeben, um das deutsche Mediensystem zu stützen. Er setzte auf eine zweckgebundene Plattformabgabe für Medien.

Es gab dazu aber innerhalb der schwarz-roten Koalition unterschiedliche Positionen. So setzten Sozialdemokraten vor einiger Zeit auf eine klassische Digitalsteuer. Die Digitalabgabe würde große Internetkonzerne wie Google und Meta treffen. Vorbild ist Österreich. Dort sind große Online-Plattformen seit 2020 verpflichtet, fünf Prozent der Einkünfte aus der Werbevermarktung abzuführen.

Weimer verteidigte nach Trumps Post seine Überlegungen. Die Nachrichtenseite ntv.de zitierte ihn mit den Worten: „Uns geht es nicht um einseitige Diskriminierungen von US-Firmen, sondern um faire Wettbewerbsbedingungen und einen vielfältigen Medienmarkt für alle.“ Er sagte auch: „Die Medienregulierung großer Plattformen sollte kein handelspolitisches Thema werden.“

Weiterlesen nach der Anzeige

Es ist nicht das erste Mal, dass Trump eine Digitalabgabe verurteilt und mit Zöllen droht. Im August 2025 hatte er schon einmal eine Warnung an Länder ausgesprochen, solche Abgaben zu stoppen. Er hatte kein explizites Land genannt. Außerdem hatte er wegen der Besteuerung von US-Konzernen bereits explizit Großbritannien gedroht, die Zolldrohung aber bis heute nicht wahr gemacht. Zölle sind ein zentrales Element in Trumps zweiter Amtszeit, jedoch stieß er mit der aggressiven Zollpolitik auch an Grenzen. So hatte der Oberste Gerichtshof in den USA viele seiner Zölle für rechtswidrig erklärt, die Trump unter Berufung auf ein Notstandsgesetz per Dekret verhängt hatte.

Der US-Präsident sprach in seiner Drohung nun davon, die neuen Zölle „unmittelbar“ zu verhängen, falls Länder Digitalsteuern beschließen. Welche rechtliche Grundlage ihm das so schnell erlauben könnte, blieb allerdings unklar. Einen Hebel, auf den Trump nach der Niederlage vor dem Supreme Court bereits mehrfach zurückgriff, ist die Einleitungen von Untersuchungen wegen mutmaßlich unfairer Praktiken auf Basis eines Passus eines Handelsgesetzes von 1974. Je nach Ausgang könnten solche Untersuchungen neue Zölle rechtfertigen. In der Vergangenheit hatten die USA schon einmal Zolluntersuchungen wegen Digitalsteuern unter anderem gegen Frankreich, Österreich, Spanien, Italien eingeleitet.

Erst in dieser Woche hatten die EU-Länder in Luxemburg grünes Licht dafür gegeben, die Zölle auf US-Industriegüter abzuschaffen und US-Meeresfrüchten sowie Agrarprodukten einen besseren Marktzugang zu gewähren. Das Handelsabkommen zwischen EU und USA hätte damit bald vollständig umgesetzt werden können. Ein Sicherheitsnetz soll aber dafür sorgen, dass die Vorteile nur dann gelten, wenn auch die USA ihre Verpflichtungen aus dem Abkommen vollständig umsetzen. Darauf hatten sich das Europaparlament und die Staaten nach langem Ringen geeinigt.

Unter anderem ist vorgesehen, dass die EU Zollgeständnisse aussetzen kann, falls die USA gegen Absprachen verstößt – etwa durch erneute Zollerhöhungen. Ein Sprecher der EU-Kommission teilte als Reaktion auf Trumps Drohung mit, Steuern diskriminierten nicht und würden „gleichermaßen für alle großen Unternehmen“ gelten, unabhängig von ihrer Herkunft. „Einseitige Maßnahmen, die sich gegen solche legitimen politischen Maßnahmen richten, sind ungerechtfertigt. Sollten solche Maßnahmen ergriffen werden, wird die EU rasch und entschlossen reagieren, um ihre Rechte und ihre regulatorische Autonomie zu verteidigen.“

Lesen Sie auch


(nie)



Source link

Weiterlesen

Künstliche Intelligenz

Drei Fragen und Antworten: So klappt der Abschied von Microsoft 365


close notice

This article is also available in
English.

It was translated with technical assistance and editorially reviewed before publication.

Sie wollen Microsoft 365 loswerden? Dafür gibt es inzwischen gute Alternativen – doch es lauern auch einige Fallstricke auf die Wechselwilligen. Tobias Richter, Titelautor der neuen iX 7/2026, erklärt, was die Konkurrenz besser kann, wo es am meisten knirscht und welche Angebote für wen passen.

Weiterlesen nach der Anzeige




Tobias Richter ist Bereichsleiter Business Development bei der Rewion GmbH mit über 20 Jahren IT-Erfahrung und bewegt sich an der Schnittstelle von Beratung, Cloud, KI, Security und Managed Services.

Viele sehen die Stärke von Microsoft 365 und Google Workspace vor allem in der Tiefe der Integration. Können die europäischen Alternativen da mithalten?

Nur teilweise. Genau hier liegt bei unseren Projekten der Kern der Diskussionen. Europäische Alternativen können zwar heute schon viele Workspace-Funktionen wie Mail, Kalender, Dateien oder Chat abdecken, in der Regel fehlt es aber an genau der Tiefe, diese Integration durchgängig durch alle Workspace-Apps zu bringen. Gerade Microsoft 365 und Google Workspace sind nicht deshalb so stark, weil jede einzelne App überlegen wäre, sondern weil der Arbeitskontext übergreifend funktioniert. Ich bin etwa im Meeting und Dokumente im Kontext werden mir direkt zur Zusammenarbeit vorgeschlagen. Das sorgt nicht nur für Nutzerakzeptanz, sondern verwöhnt die User fast im Vergleich zu möglichen anderen Lösungen.

Gerade deswegen ist in der Diskussion wichtig, die Hauptmotivation der Organisation zu benennen. Die europäischen Anbieter zeichnen sich insbesondere durch souveränes Hosting, rechtliche Rahmenbedingungen, Datenkontrolle und die Transparenz ihrer Open-Source-Pakete aus. Für diejenigen, die Souveränität als entscheidenden Faktor für ihre Infrastruktur, Datenhaltung und die Möglichkeit eines Ausstiegs ansehen, gibt es hier tragfähige Lösungen. Wer dagegen die gleiche Integrationstiefe wie bei M365 oder Google erwartet, wird derzeit häufig mit erheblichen Kompromissen leben müssen. Ob das neue Euro-Office in der Lage sein wird, hier Fortschritte zu machen, bleibt abzuwarten.

Wer nach Alternativen sucht, findet integrierte Suiten, modular aufgebaute Angebote und Managed Services. Was empfiehlt sich da für welche Art von Unternehmen oder Organisation?

Grob gesagt sind integrierte Suiten etwas für Organisationen, die zwar von Microsoft oder Google weg wollen, aber sich nicht eigenen Integrationsbetrieb leisten können oder wollen. Also für mittlere Unternehmen, Verwaltungen oder Organisationen mit begrenzten IT-Ressourcen. Wo schlicht die Expertise fehlt oder teuer eingekauft werden müsste, empfehlen sich eher geschlossene einfache Systeme, um den Betriebsaufwand gering zu halten.

Weiterlesen nach der Anzeige

Modular funktioniert nur für Unternehmen mit sehr hoher IT-Reife, klarem Architekturanspruch und dem Willen, Identitäten, Integration, Betrieb und Governance dauerhaft selbst zu verantworten. Meist sind dies große Unternehmen, öffentliche Auftraggeber oder stark regulierte Branchen. Dafür hat man maximale Kontrolle über die eigenen Daten, den Betrieb und Abhängigkeiten. Der Nachteil ist die Integrations- und Betriebsverantwortung. Der Zusammenhang zwischen den Systemen muss ständig hergestellt, betrieben und weiterentwickelt werden. Modular heißt also in der Praxis nicht weniger IT, sondern eher mehr.

Managed Services liegen ein bisschen dazwischen. Hier wird der Workplace, egal ob Suite oder modular, über externe Dienstleister betrieben und betreut. Dieses Modell ist sinnvoll für Unternehmen, die höhere Anforderungen an Sicherheit, Souveränität oder Individualisierung haben, aber keine eigene IT‑Organisation in entsprechender Tiefe aufbauen wollen. Im Umkehrschluss entsteht hier aber auch eine neue Abhängigkeit vom Dienstleister und die Gestaltungsmöglichkeiten sind begrenzt durch dessen Betriebsmodelle. Grundsätzlich muss man aber sagen, dass der Betriebsaufwand vermutlich in allen Alternativ-Varianten ansteigt.

In welchen Einsatzfeldern knirscht es am meisten, wenn man M365 oder Google Workspace den Rücken kehrt?

Tatsächlich dort, wo die User nicht mit einzelnen Apps, sondern mit Übergängen dazwischen und also mit Daten aus mehreren Produkten arbeiten. Das große Problem sind hier vor allem Kalender, Chat und Meetings, mobile Nutzung, auch die IT-Administration – und dort vor allem die Verknüpfung der Workplace-Apps mit bestehenden Identitäten und Berechtigungen. An einer kohärenten Integration der großen Suites hängen neben der reinen Online-Präsenz eben oft auch Gastzugänge, der Dateikontext, Policies und häufig ein MDM mit dran. Wenn dieser Zusammenhang aufgebrochen wird, dann spüren das die Anwender sofort im Alltag. Ein Wechsel scheitert insofern oft weniger an fehlenden Einzelfunktionen, als an der Summe kleiner Brüche im Arbeitsfluss, etwa weil die Rechte zwischen Dateien und verschiedenen Apps nicht passen.

Die zweite, vielleicht noch viel größere Herausforderung ist allerdings, die Belegschaft von einem gänzlich neuen Produkt zu überzeugen. Die Nutzer kennen seit Jahren ihre Häkchen, Ablagen und Prozesse oder auch die kleinen Tools, die einem durch den Arbeitsalltag geholfen haben – ich nenne hier mal das Stichwort „Excel Makros mit VBA Scripts“. Eine Transformation an dieser Stelle kann nicht nur immens viel Geld kosten, sondern auch bei vielen Mitarbeitern zu extremem Frust führen, wenn man kein ordentliches Change Management, gute Kommunikation, Weiterbildung und Trainings organisiert.

Tobias, vielen Dank für die Antworten! Einen Überblick zu den M365-Alternativen gibt es in der neuen iX. Außerdem beleuchten wir, wie es beim souveränen Workplace zwischen Anspruch und Wirklichkeit aussieht und wie man die Migration von M365 auf Nextcloud angehen kann. All das und viele weitere Themen finden Leser im Juli-Heft, das ab sofort im heise Shop oder am Kiosk erhältlich ist.

In der Serie „Drei Fragen und Antworten“ will die iX die heutigen Herausforderungen der IT auf den Punkt bringen – egal ob es sich um den Blick des Anwenders vorm PC, die Sicht des Managers oder den Alltag eines Administrators handelt. Haben Sie Anregungen aus Ihrer tagtäglichen Praxis oder der Ihrer Nutzer? Wessen Tipps zu welchem Thema würden Sie gerne kurz und knackig lesen? Dann schreiben Sie uns gerne oder hinterlassen Sie einen Kommentar im Forum.


(axk)



Source link

Weiterlesen

Künstliche Intelligenz

Bahnausfall: Wartungsarbeiten künftig nur von 0 bis 4 Uhr


Nach zuerst nur stückweisen und zögerlichen Erklärungen zum bundesweiten Ausfall des Zugverkehrs hat die Deutsche Bahn nun einige technische Details zu den Ursachen vorgelegt. Ebenso soll es für künftige Wartungsarbeiten neue Regeln geben, denn: laut Bahn „planmäßige Instandhaltungsarbeiten“ hatten zum Stillstand aller Züge geführt. Von einem fehlgeschlagenen Softwareupdate hatten in der fraglichen Nacht bereits dpa und SWR berichtet, die Bahn hat das nun bestätigt.

Weiterlesen nach der Anzeige

In einem am Freitag veröffentlichten Blogbeitrag beschreibt die Deutsche Bahn, dass der Austausch eines Netzwerk-Switches ursächlich die Probleme verursacht hat. Dabei habe es dann, so wörtlich, einen „singulären Softwarefehler“ gegeben, aber keine Fehlermeldung. Das resultierte in einem Ausfall des Mobilfunksystems GSM-R, ohne das Züge nicht fahren dürfen. Für GSM-R gibt es laut Bahn zwar ein redundantes System – das wurde aber nicht automatisch aktiviert. Es scheint, als wäre diese Umschaltung von einer Fehlermeldung abhängig gewesen, diese blieb aber wie beschrieben aus.

Für einen solchen Fall, schreibt die Bahn, ist zunächst ein Cyberangriff auszuschließen. Das erscheint sinnvoll, denn in solchen Fällen könnte man seinen eigenen Systemen nicht mehr trauen. Durch übereilte Gegenmaßnahmen an der falschen Stelle können dann die Probleme nur größer werden. Nach 90 Minuten haben dann Mitarbeiter der Bahn manuell die „Rückfallebene“ aktiviert, die Züge konnten wieder fahren.

Das deckt sich mit Beobachtungen von heise online und zahlreichen Berichten von Reisenden: Schon gegen 0:30 Uhr bewegten sich einige Züge wieder. Die ersten Meldungen von im Bahnverkehr beschäftigten Personen über den Ausfall von GSM-R und damit des gesamten Zugverkehrs gab es gegen 22:20 Uhr. Zum zuerst befürchteten Verkehrschaos am Mittwochmorgen kam es nicht. Bei längeren Ausfällen von zentralen Bahnsystemen ist das zwangsläufig der Fall, weil Personal und Züge sich nicht da befinden, wo sie sein sollten.

Um solche Ausfälle zu vermeiden, hat die Bahn drei Maßnahmen ergriffen: Vorerst soll es keinen Austausch von Komponenten mehr geben, mit dem Hersteller des Switches soll der Fehler behoben werden. Und wohl am wichtigsten, und von Beobachtern häufig gefordert: Instandhaltungsarbeiten sollen nur noch von 0 Uhr nachts bis 4 Uhr morgens durchgeführt werden. Dann fahren auf deutschen Schienen fast nur Güterzüge, die ohne große Folgeprobleme auch auf freier Strecke anhalten können.

Weiterlesen nach der Anzeige

Der Chef der Schienen, der Vorstandsvorsitzende der DB InfraGO, Philipp Nagl, beschreibt in dem Blogeintrag zudem, dass man derzeit für GSM-R die „Rückfallebene über den öffentlichen Mobilfunk“ neu aufstellen würde. An der Sanierung von GSM-R arbeitet die Bahn laut Nagl schon länger, es soll unter anderem resilienter werden. Noch mindestens zehn Jahre soll das auf 2G basierende System der Bahn noch gebraucht werden, erst dann soll nur noch der Zugfunk-Standard FRMCS (Future Railway Mobile Communication System) genutzt werden. Aber, so die Bahn: FRMCS sei durch die Europäische Union noch nicht spezifiziert, daher könnten Komponenten dafür auch weder bestellt noch verbaut werden.

Lesen Sie auch


(nie)



Source link

Weiterlesen

Beliebt