Entwicklung & Code
Wie KI die Open-Source-Entwicklung verändert
KI wirbelt die die Communities von Open-Source-Projekten durcheinander und stellt Entwicklerinnen und Entwickler vor wichtige Fragen. Darf Open-Source-Code zum Trainieren von KI-Modellen uneingeschränkt verwendet werden? Wo hilft KI und wo schadet sie Open-Source-Projekten – beim Beantworten von Fragen zum Code, beim Programmieren und beim Projektmanagement? Was ist Open Washing und welche Rolle spielt Open Source im EU AI Act? Und schließlich die entscheidende Frage: Wird KI Open Source verdrängen? Antworten liefert die Community selbst. Tiefere Einblicke bieten die im Text verlinkten Videos von Vorträgen von Open-Source-Konferenzen der letzten sechs Monate: der Open Community Experience (OCX) mit den Unterkonferenzen EclipseCon und OSGi Summit, dem 38C3 sowie der FOSDEM 2025. Antworten auf diese Fragen liefern zudem Vertreter der Eclipse Foundation, dem Veranstalter der OCX.
Holger Voormann ist als Diplom-Informatiker freiberuflich tätig. Für heise online berichtet er regelmäßig über neue Releases der Entwicklungsumgebung Eclipse. Er ist Contributor bei Eclipse, llama.cpp und weiteren Open-Source-Projekten.
Open-Source-Code als KI-Trainingsdaten: (l)egal?
Code macht einen großen Teil der Daten aus, mit denen heutige KI-Modelle trainiert werden. Benötigt wird er nicht nur, um die Modelle für Programmieraufgaben fit zu machen, sondern auch, um deren Schlussfolgerungsfähigkeit, das Reasoning, zu verbessern. Einige Chatbot-Modelle sind zudem in der Lage, anstatt direkt eine Antwort zu geben, Python-Code zu erstellen, der die Antwort teilweise berechnet und – damit er keinen Schaden anrichten kann – in einer Sandbox läuft. Mit der Ausgabe von der Programmausführung generiert dann das Modell die eigentliche Antwort. Dieser Code Interpreter hilft insbesondere bei Fragen, deren Beantwortung komplexere Berechnungen benötigt.
Der Code, der für das Training der Modelle verwendet wird, ist – wie könnte es anders sein – Open Source: in großen Mengen im Netz frei erhältlich. Die Llama-3-Basismodelle von Meta entstanden beispielsweise aus einem Training mit 15 Billionen Token, was mehr als 10 Billionen Wörtern entspricht, 17 Prozent davon Code. Aber wie ist das rechtlich? Ist ein Large-Language-Model ein von dem Code, anhand dessen es trainiert wurde, abgeleitetes Werk? Und wenn ja, unterliegt es dann den jeweiligen Lizenzbedingungen?
Die rechtliche Lage ist unklar. In Hugging Face BigCode (siehe OCX-Vortrag), einer umfangreichen Sammlung von Quelltexten, die aus öffentlichen GitHub-Repositories zusammengesammelt wurden, findet sich kein Code unter der Eclipse Public License (EPL), sondern nur Code unter der Apache-, MIT- und ähnlichen Lizenzen. Bei diesen Lizenzen ist im Gegensatz zur EPL nicht vorgeschrieben, dass abgeleitete Werke unter derselben Lizenz veröffentlicht werden müssen. Mike Milinkovich, Geschäftsführender Direktor der Eclipse Foundation, geht nicht von einer Verletzung der EPL aus, kann sie aber auch nicht sicher ausschließen. Es könne noch einige Jahre dauern, bis die KI-Frage geklärt sei, da das Urheberrecht von Land zu Land zwar weitgehend einheitlich, aber im Detail unterschiedlich sei und es noch keinen starken Konsens darüber gebe, ob es sich um ein abgeleitetes Werk oder um Fair Use handele. Eine EPL Version 3.0, die explizit die Verwendung als Trainingsdaten erlaubt oder verbietet, ist jedenfalls nicht geplant und würde ohnehin nicht rückwirkend für bereits vorhandenen Code gelten.
Unabhängig davon, ob die Verwendung als Trainingsdaten rechtlich unter Fair Use fällt oder nicht, stellt sich die Frage, ob es moralisch in Ordnung ist, Open-Source-Code ungefragt zum Trainieren von KI-Modellen zu verwenden. Wer seinen Code als Open Source veröffentlicht, macht das in der Regel in der Hoffnung auf Beiträge von anderen: Fehlerberichte, Verbesserungsvorschläge und gelegentliche Codebeiträge bis hin zur aktiven Beteiligung am Projekt. Eine Zweckbindung oder ein Verbot der kommerziellen Nutzung ist hier eher hinderlich. Restriktive Nutzungsbedingungen schränken den Kreis der potenziellen Nutzenden ein, aus dem sich wiederum die Mitwirkenden rekrutieren. Durch die Auslagerung eines Open-Source-Projekts an einen herstellerunabhängigen Ort, wie ihn die Eclipse Foundation oder andere Open-Source-Organisationen bieten, gibt man noch mehr Kontrolle ab, macht es aber für Unternehmen und Einzelpersonen attraktiver, sich zu beteiligen. Solange nicht alle, die Open Source direkt nutzen, sich auch daran beteiligen, kann man schlecht von denen, die den Code indirekt als Trainingsdaten nutzen, verlangen, etwas zurückzugeben.
Arbeitserleichterung oder Mehraufwand durch Chatbots?
Aber es ist nicht nur ein Nehmen von Trainingsdaten, sondern auch ein Geben: Chatbots entlasten Entwicklerinnen und Entwickler, indem sie Fragen zu Open-Source-Projekten beantworten. Fragen, die ansonsten in projektinternen Foren oder auf Webseiten wie Stack Overflow gestellt und dort von den Developern selbst oder Anwendern beantwortet worden wären. Kleinere Modelle lassen sich selbst ohne teure Grafikkarte auf dem eigenen Rechner ausführen, wenn man Geschwindigkeitseinbußen in Kauf nimmt: unter anderem mit einem der beiden bekannten Open-Source-Kommandozeilentools MLX von Apple für Apple-Computer oder llama.cpp für macOS, Linux und Windows; mit Ollama, das die Verwaltung von Modellen vereinfacht, oder mit llamafile, welches das Modell und den Code zum Ausführen in einer einzelnen Datei packt und wie Ollama auf llama.cpp basiert.
Chatbots laufen Stack Overflow den Rang ab: Seit Erscheinen von ChatGPT Ende November 2022 halbiert sich jährlich die Anzahl neuer Fragen und Antworten auf Stack Overflow. Und auch die Fragen, die noch gestellt werden, verweisen mitunter auf nicht funktionierende Chatbot-Lösungsvorschläge und Dinge, die es nicht gibt und die vermutlich eine KI herbeihalluziniert hat. Auch wenn Chatbots mal daneben liegen, geben sie doch zumeist schneller und freundlicher Auskunft als Menschen auf Stack Overflow und anderswo oder als eine Websuche es vermag. „Let me ask ChatGPT for you“ ist das neue „Let me google that for you“.
Die Kehrseite dieser KI-Helfer ist, dass sie auch Stack-Overflow-Antworten oder Beiträge für Open-Source-Projekte – beispielsweise Curl – generieren, die sich erst bei genauerem Hinsehen als nutzlos erweisen und so unnötigen Aufwand verursachen. Ein weiterer Nachteil von KI-generierten Lösungsvorschlägen ist, dass sie dazu neigen, ältere statt aktueller Frameworks und Tools zu bevorzugen. Neuere Informationen werden zwar berücksichtigt, wenn sie in einer Anfrage mitgegeben werden. Damit die KI sie jedoch sinnvoll anwenden, also generalisieren kann, muss sie zuvor anhand entsprechender Daten in ausreichender Quantität und Qualität trainiert worden sein.
Wenn Fragen nicht öffentlich, sondern an Chatbots gestellt werden, erfahren Projekt-Maintainer außerdem nicht, welche Probleme andere mit ihrer Software haben. Nicht nur das ausbleibende Feedback könnte sich als problematisch für die Projekte erweisen, sondern auch weniger öffentlich verfügbare Fragen und Antworten für das Training zukünftiger Modelle. Langfristig liegt es daher im Interesse beider Seiten, eine Lösung für den zerbrochenen Feedback-Loop zu finden.
KI-Unterstützung beim Programmieren
Neben allgemeinen Chatbots gibt es auch KI-Unterstützung speziell fürs Programmieren: zum Generieren von Code, Code-Kommentaren und Tests sowie zur Fehlerbehebung und Verbesserung von bestehendem Code. Integriert als Chatbot oder – um kontextabhängige Vorschläge auf Basis des umgebenden Codes zu liefern, speziell oder zusätzlich zur Interaktion in Chat-Form trainiert – direkt im Code-Editor als Codevervollständigung, helfen sie auch bei der Verwendung von Open-Source-Frameworks. Durch den hinzugefügten Kontext sind die Anfragen in der Regel länger, der Rechenaufwand dadurch höher. Frei verfügbare Angebote gibt es wenige, die zudem eine Anmeldung erfordern und auf eine bestimmte Anzahl Codevervollständigungsvorschläge und Chat-Anfragen pro Monat begrenzt sind.
Es gibt Open-Source-Tools als Alternativen zum Platzhirsch GitHub Copilot und solche, die sich Copilot zunutze machen, um ein besseres Tooling anbieten zu können. Eclipse Theia ist eine Alternative zu Visual Studio Code mit GitHub Copilot (weitere Informationen hierzu in einem Blogpost und OCX-Vortrag von EclipseSource): Anfragen, die nach außen gesendet werden, werden protokolliert und sind einsehbar; es lassen sich Agenten definieren, bei denen man festlegen kann, welche Zusatzinformation genau enthalten sein soll. Neben GitHub Copilot lassen sich auch lokal auf dem Rechner installierte Modelle verwenden, was bei GitHub Copilot erst seit Kurzem möglich ist.
Ein Vertreter eines mithilfe von GitHub Copilot verbesserten Toolings ist die Visual-Studio-Code-Erweiterung Spring Tools zur Unterstützung beim Programmieren in Java mit dem Webframework Spring (siehe OCX-Vortrag). So erscheinen im Code an bestimmten Stellen „Explain … with Copilot“-Links. Klickt man beispielsweise auf den Link „Explain Query with Copilot“, den Spring Tools bei Spring-spezifischen Annotationen mit einer SQL-Abfrage anzeigt, erhält man die von Copilot generierte Erklärung, ohne selbst eine Frage zu formulieren. Bei manuell erstellten Fragen kann Spring Tools den Prompt um wichtige Hinweise anreichern, bevor dieser an Copilot gesendet wird – beispielsweise, dass bei einem Projekt mit Spring Boot 3 Jakarta EE und nicht mehr Java EE zu verwenden ist.
Auch die von Copilot zurückgesendete Antwort kann Spring Tools um Schaltflächen anreichern, zum Beispiel „Apply Changes“ am Ende einer Antwort mit mehreren Codefragmenten, um alle mit einem Klick an die jeweils richtige Stelle im Projekt zu übernehmen. Copilot-basiertes Tooling besitzt unter anderem die Schwierigkeit, dass Copilot laufend weiterentwickelt wird: Derselbe „Explain … with Copilot“-Link, der heute eine gute Erklärung liefert, kann morgen schon nicht mehr funktionieren. Eine weitere Schwierigkeit entsteht, wenn GitHub Copilot nicht kennt, wonach gefragt wird, weil das verwendete Framework zu neu beziehungsweise der Wissensstand von Copilot zu alt ist. Bei der Anreicherung des Prompts kann auch die Längenbeschränkung ein Problem darstellen.
(Bild: TechSolution/Shutterstock)
Nach dem großen Erfolg der ersten betterCode() GenAI findet die Online-Konferenz zur KI-gestützten Softwareentwicklung am 26. Juni erneut statt.
Die Veranstalter iX und dpunkt.verlag haben das Programm der Konferenz aktualisiert und anhand des Feedbacks weiter verbessert. Es bietet folgende Vorträge:
- Softwareentwicklung mit Copilot, ChatGPT und Co
- Was gibt es Neues bei KI-Coding-Tools?
- Software mit KI-Unterstützung testen
- Mit ChatGPT Dinosaurier besiegen – LLMs für die Analyse alter Systeme
- Stärken und Schwächen KI-unterstützter, sicherer Softwareentwicklung
- Rechtliche Aspekte KI-gestützter Softwareentwicklung
Entwicklung & Code
programmier.bar: CTO-Special mit Peyman Pouryekta – Interim CTO und Berater
Peyman Pouryekta berät heute als selbstständiger Experte CTOs, Firmen und Venture Funds – doch sein Weg dorthin war alles andere als geradlinig. Geboren 1982 in Teheran, kam er als Kind nach Deutschland, machte später eine Elektriker-Ausbildung, brach ein Studium ab und fand schließlich über einen weiteren Ausbildungsweg zur Softwareentwicklung. In den 2010er Jahren arbeitete er in Berlin schon früh mit neuronalen Netzen, KI und skalierbaren Produkten.
Im Gespräch mit Jan Gregor Emge-Triebel und Dennis Becker geht es um Peymans Ausbildungsweg, seine ersten Leadership-Rollen und seine Entscheidung für die Selbstständigkeit. Außerdem diskutieren die drei, welche Fehler Führungskräfte sowie Gründerinnen und Gründer häufig machen – und welche Rolle künstlliche Intelligenz in Zukunft spielen wird.
Empfohlener redaktioneller Inhalt
Mit Ihrer Zustimmung wird hier ein externer Inhalt geladen.
Die aktuelle Ausgabe des Podcasts steht auch im Blog der programmier.bar bereit: „Peyman Pouryekta – Interim CTO und Berater„. Fragen und Anregungen gerne per Mail oder via Mastodon, Bluesky, LinkedIn oder Instagram.
(mai)
Entwicklung & Code
Neuerungen in C++26: Datenparallele Datentypen (SIMD)
Die SIMD-Bibliothek bietet in C++26 portable Typen zur expliziten Angabe von Datenparallelität und zur Strukturierung von Daten für einen effizienteren SIMD-Zugriff. Bevor wir uns im Detail mit der neuen Bibliothek befassen, möchte ich kurz ein paar allgemeine Anmerkungen zu SIMD (Single Instruction, Multiple Data) voranschicken.
Rainer Grimm ist seit vielen Jahren als Softwarearchitekt, Team- und Schulungsleiter tätig. Er schreibt gerne Artikel zu den Programmiersprachen C++, Python und Haskell, spricht aber auch gerne und häufig auf Fachkonferenzen. Auf seinem Blog Modernes C++ beschäftigt er sich intensiv mit seiner Leidenschaft C++.
SIMD – Single Instruction, Multiple Data
Vektorisierung bezieht sich auf die SIMD-Erweiterungen (Single Instruction, Multiple Data) des Befehlssatzes moderner Prozessoren. SIMD ermöglicht es dem Prozessor, eine Operation parallel auf mehrere Daten anzuwenden.
Ein einfaches Beispiel: Ob ein Algorithmus parallel und vektorisiert ausgeführt wird, hängt von vielen Faktoren ab – unter anderem davon, ob die CPU und das Betriebssystem SIMD-Befehle unterstützen. Außerdem kommt es auf den Compiler und den Optimierungsgrad an, der zum Kompilieren des Codes eingesetzt wird.
// SIMD.cpp
const int SIZE= 8;
int vec[]={1,2,3,4,5,6,7,8};
int res[SIZE]={0,};
int main(){
for (int i= 0; i < SIZE; ++i) {
res[i]= vec[i]+5; // (1)
}
}
Zeile 1 ist die Schlüsselzeile in dem kleinen Programm. Dank des Compiler Explorers ist es recht einfach, die Assemblerbefehle für Clang 3.6 mit und ohne maximale Optimierung (-O3) zu generieren.
Ohne Optimierung
Obwohl meine Zeit, in der ich mit Assemblerbefehlen herumgespielt habe, lange vorbei ist, ist es offensichtlich, dass alles sequenziell ausgeführt wird:
(Bild: Rainer Grimm)
Mit maximaler Optimierung
Durch die Verwendung der maximalen Optimierung erhalte ich Befehle, die parallel auf mehreren Datensätzen ausgeführt werden:
(Bild: Rainer Grimm)
Die Move-Operation (movdqa
) und die Add-Operation (paddd
) verwenden die speziellen Register xmm0
und xmm1
. Beide Register sind sogenannte SSE-Register mit einer Breite von 128 Bit. Damit können 4 ints
auf einmal verarbeitet werden. SSE steht für Streaming SIMD Extensions. Leider sind Vektorbefehle stark von der eingesetzten Architektur abhängig. Weder die Befehle noch die Registerbreiten sind einheitlich.
Moderne Intel-Architekturen unterstützen meist AVX2 oder sogar AVX-512. Dies ermöglicht 256-Bit- oder 512-Bit-Operationen. Damit können 8 oder 16 ints
parallel verarbeitet werden. AVX steht für Advanced Vector Extension.
Genau hier kommen die neuen datenparallelen Datentypen der Bibliothek ins Spiel, die eine einheitliche Schnittstelle zu Vektorbefehlen bieten.
Datenparallele Typen (SIMD)
Bevor ich mich mit der neuen Bibliothek beschäftige, sind einige Definitionen erforderlich. Diese Definitionen beziehen sich auf den Proposal P1928R15. Insgesamt umfasst die neue Bibliothek sechs Proposals.
(Bild: Rainer Grimm)
Die Menge der vektorisierbaren Typen umfasst alle Standard-Ganzzahltypen, Zeichentypen sowie die Typen float
und double
. Darüber hinaus sind std::float16_t
, std::float32_t
und std::float64_t
vektorisierbare Typen, sofern sie definiert sind.
Der Begriff datenparallel bezieht sich auf alle aktivierten Spezialisierungen der Klassen-Templates basic_simd
und basic_simd_mask
. Ein datenparalleles Objekt ist ein Objekt vom datenparallelen Typ.
Ein datenparalleler Typ besteht aus einem oder mehreren Elementen eines zugrunde liegenden vektorisierbaren Typs, der als Elementtyp bezeichnet wird. Die Anzahl der Elemente ist für jeden datenparallelen Typ eine Konstante und wird als Breite dieses Typs bezeichnet. Die Elemente in einem datenparallelen Typ werden von 0 bis Breite −1 indiziert.
Eine elementweise Operation wendet eine bestimmte Operation auf die Elemente eines oder mehrerer datenparalleler Objekte an. Jede solche Anwendung ist in Bezug auf die anderen nicht sequenziell. Eine unäre elementweise Operation ist eine elementweise Operation, die eine unäre Operation auf jedes Element eines datenparallelen Objekts anwendet. Eine binäre elementweise Operation ist eine elementweise Operation, die eine binäre Operation auf entsprechende Elemente zweier datenparallelisierter Objekte anwendet.
Nach so viel Theorie möchte ich nun ein kleines Beispiel zeigen. Es stammt von Matthias Kretz, Autor des Proposals P1928R15. Das Beispiel aus seiner Präsentation auf der CppCon 2023 zeigt eine Funktion f
, die einen Vektor entgegennimmt und dessen Elemente auf ihre Sinuswerte abbildet:
void f(std::vector& data) {
using floatv = std::simd;
for (auto it = data.begin(); it < data.end(); it += floatv::size()) {
floatv v(it);
v = std::sin(v);
v.copy_to(it);
}
}
Die Funktion f
nimmt einen Vektor von Floats (data) als Referenz. Sie definiert floatv
als SIMD-Vektor von Floats unter Verwendung von std::simd
. f
durchläuft den Vektor in Blöcken, wobei jeder Block die Größe des SIMD-Vektors hat.
Für jeden Block gilt:
- Lädt den Block in einen SIMD-Vektor (
floatv v(it);
). - Wendet die Sinusfunktion gleichzeitig auf alle Elemente im SIMD-Vektor an (
v = std::sin(v);
). - Schreibt die Ergebnisse zurück in den ursprünglichen Vektor (
v.copy_to(it);
).
Die Behandlung von SIMD-Anweisungen wird besonders elegant, wenn der Proposal P0350R4 in C++26 implementiert wird. SIMD kann dann beispielsweise als neue Execution Policy in Algorithmen verwendet werden:
void f(std::vector& data) {
std::for_each(std::execution::simd, data.begin(), data.end(), [](auto& v) {
v = std::sin(v);
});
}
Wie geht es weiter?
In meinem nächsten Artikel werde ich mich näher mit der neuen SIMD-Bibliothek befassen.
(map)
Entwicklung & Code
Die Produktwerker: Scrum-Werte für Product Owner – ein Kompass für den Alltag
Die fünf Scrum-Werte stehen etwas unscheinbar im Scrum Guide – nur ein kurzer Absatz, gefühlt kaum mehr als eine Randnotiz. Und doch bilden sie die Grundlage dafür, dass iteratives Arbeiten, gemäß dem Prinzip empirischer Prozesssteuerung, in Scrum überhaupt möglich ist.
In dieser Folge sprechen Oliver Winter und Tim Klein darüber, wie Product Owner diese Scrum-Werte im Alltag konkret leben können. Nicht abstrakt und theoretisch, sondern ganz praktisch – im Spannungsfeld von Verantwortung, Kommunikation und Produktführung.
Die fünf Scrum-Werte reflektieren
Viele Teams und Organisationen arbeiten mit Scrum, ohne die Bedeutung der Scrum-Werte wirklich zu reflektieren. Dabei hängt vieles genau davon ab: Wie offen geht man mit Feedback um? Wie mutig spricht man Konflikte an? Wie sehr helfen Fokus, Commitment und Respekt dabei, Klarheit zu schaffen und wirkungsvoll zusammenzuarbeiten?
Tim und Oliver nehmen sich alle fünf Scrum-Werte vor – Commitment, Fokus, Mut, Offenheit und Respekt – und beleuchten sie aus der Sicht eines Product Owners. Sie zeigen, dass es nicht um perfekte Haltung oder moralische Überlegenheit geht, sondern um gelebte Verantwortung. Und um die Wirkung, die entsteht, wenn ein Product Owner diese Werte nicht nur benennt, sondern im täglichen Handeln sichtbar macht.
Ob in der Priorisierung, im Stakeholder-Dialog oder im Sprint Review: Die Scrum-Werte zeigen sich überall. Wer als Product Owner mutig ist, kann klare Entscheidungen treffen, statt es allen recht machen zu wollen. Wer respektvoll kommuniziert, schafft Vertrauen – gerade auch in schwierigen Situationen. Und nur wer offen bleibt, kann Feedback wirklich annehmen, ohne die eigene Position zu verlieren.
Scrum-Werte in die Praxis umsetzen
Oft stehen diese Werte in Spannung zueinander – oder im Widerspruch zu dem, was das Umfeld verlangt. Hierzu hatten die Produktwerker letzte Woche die Episode mit Johannes Schartau („Wenn Strukturen die Produktentwicklung behindern“). Gerade unter Druck fällt es schwer, Respekt zu zeigen, mutig zu bleiben oder sich zu fokussieren. Und genau deshalb braucht es Reflexion: ein klares Gespür dafür, welchen Wert ich in meinem Kontext gerade besonders stärken will. Und die Bereitschaft, kleine Schritte zu gehen, statt alles auf einmal verändern zu wollen.
Diese Folge ist eine Einladung, den Scrum-Werten mehr Raum zu geben – nicht als Theorie, sondern als Kompass im Alltag. Wer sie ernst nimmt, stärkt nicht nur die eigene Wirksamkeit als Product Owner, sondern auch das Vertrauen im Team und in die eigene Produktverantwortung.
Weitere erwähnte Podcastfolgen
Diese weiteren Episoden werden im Gespräch genannt:
Die aktuelle Ausgabe des Podcasts steht auch im Blog der Produktwerker bereit: „Was bedeuten die Scrum Werte für Product Owner – und wie lebst du sie im Alltag„.
(Bild: deagreez/123rf.com)
So geht Produktmanagement: Die Online-Konferenz Product Owner Day von dpunkt.verlag und iX geht in die achte Runde. Am 13. November 2025 können Product Owner, Produktmanagerinnen und Service Request Manager dort ihren Methodenkoffer erweitern, sich vernetzen und von den Good Practices anderer Unternehmen inspirieren lassen.
Vergünstigte Blind-Bird-Tickets sind bis zur Programmveröffentlichung erhältlich. In der Rückschau finden Interessierte das Programm des Vorjahres.
(mai)
-
Online Marketing & SEOvor 5 Tagen
Aus Marketing, Medien, Agenturen & Tech: Diese 40 klugen Köpfe unter 40 müssen Sie kennen
-
Digital Business & Startupsvor 4 Tagen
Von Peter Thiel finanziertes Krypto-Startup Bullish will an die Börse
-
Künstliche Intelligenzvor 5 Tagen
Amazon soll Werbung bei Prime Video verdoppelt haben
-
Künstliche Intelligenzvor 5 Tagen
Telemedizin: Patientenversorgung braucht einfach zugängliche Kommunikationswege
-
Apps & Mobile Entwicklungvor 3 Tagen
So gut ist Dune: Awakening: Dune sehen und durch Sandwürmer sterben
-
Datenschutz & Sicherheitvor 5 Tagen
CCC: Gesammelte Ausweisdaten von Übernachtungsdienstleister Numa gefunden
-
Digital Business & Startupsvor 5 Tagen
Es mangelt an Later-Stage-Investments – so können Gründer:innen dennoch punkten
-
UX/UI & Webdesignvor 4 Tagen
Kunst & KI begleitet die Münchner Standort-Eröffnung › PAGE online