Ich hab mal mit 2 Bekannten aus der Embedded-Entwicklung gesprochen und sie gebeten den Thread mal zu lesen.
Einer der beiden macht Software für Baumaschinen, der andere macht viel im Bereich Medizintechnik.
Deren gemeinsames Fazit:
Mike100 hat im Punkt Quellcodeverwaltung und -Versionierung recht, da natürlich die meisten Quellcode-Files reine Textdateien sind.
Sobald aber irgendwelche Bedienoberflächen dazukommen, sieht die Welt wieder anders aus. Hier gibt es diverse Formate (inkl. Bin-Files).
Was die Entwicklngsumgebungen und die Tools angeht, stehen sie hier vor dem genau gleichem Problem wie wir auch.
Um eine Software für ein Produkt (egal ob Kran oder Dosierpumpe für Medikamente) über Jahre zu pflegen und Supporten, müssen beim Make-Prozess immer die gleichen Bin-Files erzeugt werden.
Daher gibt es im Entwicklungsprozess einen Freeze für Entwicklungssystem, eingesetzte Tools, Frameworks und Bibliotheken. Hier wird genauso mit VMs gearbeitet, wie es viele von uns auch tun.
Für mich als SPS'ler stellt es sich so dar, dass die Kollegen eigentlich noch mehr Probleme mit dem Softwareumfeld haben als wir.
Gruß
Blockmove
Ich glaube, dass die Embedded Entwicklung sehr vielfältig ist und daher ein allgemeiner Vergleich nicht möglich ist.
Quellcode-Verwaltung ist mit C natürlich besser als mit TIA-Portal-ähnlichen IDEs.
Make ist zwar ein sehr altes Build-Tool, aber trotzdem noch halbwegs brauchbar. Im Gegensatz zu TIA weiß man bei Make wenigstens was im Hintergrund passiert (nämlich ein Directed Acyclic Graph aus Files mit Last-Modified-Timestamps).
Warum die exakt gleichen Bin-Files produziert werden müssen, ist mir ein Rätsel. So etwas kenne ich nur aus dem Open Source Security Bereich, wo ein kryptografischer Hash den Link zwischen einem Open Source Git-Commit und einem Binary-File garantiert.
Wenn man Tests hat, dann sehe ich eine Änderung der Build-Umgebung als unproblematisch. Ich kann beispielsweise auf eine neue Version des GCC-Compilers upgraden, und wenn alle Tests immer noch passen, dann kann ich mit hoher Sicherheit sagen dass der neue GCC-Compiler funktioniert (für mein Projekt).
Einen "Tool-Freeze" mit VMs halte ich nicht für zielführend. Was soll dadurch gewonnen werden, dass mit historischen Versionen von Make/GCC/Linux gearbeitet wird?
Qualität sollte auf andere Art gesichert werden, und nicht durch einen erzwungenen Total-Stillstand in irgendeiner zehn Jahre alten Linux-Distribution. Wenn "never touch anything" das Hauptmotto ist, dann ist es bezüglich Testabdeckung und Codestrukturierung vermutlich ziemlich dürr.
Abschließend noch zum Thema Bedienoberflächen/Visualisierung:
Ich halte es für sinnvoll, die Visualisierung vom Embedded-Core oder SPS-Programm möglichst gut zu trennen (hinsichtlich Software-Architektur).
Im Gegensatz dazu halte ich den TIA-WinCC-Weg für den falschen Weg hinsichtlich skalierbarer Programmierung in Teams.
Denn auch bei Visualisierungen halte ich obskure Binaries für den falschen Weg.
Dazu passend ein Beispiel aus der Smartphone-Welt:
Apple hat vor kurzem iOS-Storyboards durch iOS-SwiftUI ersetzt. Seitdem können komplexe iOS-Apps mit menschenlesbaren Textfiles programmiert werden, und siehe da: Die Developer Experience ist viel besser als vorher, und fast kein iOS-Dev will jemals zurück zu Storyboards.
SwiftUI und React sind auf einem so hohen Niveau, dass TIA WinCC nicht einmal in einem Paralleluniversum auch nur annähernd mithalten könnte.
Und nachdem Siemens bereits TIA-WinCC, TIA-Openness, TIA-Git-Extensions und TIA-Multiuser hinsichtlich Developer Experience und Robustheit vermasselt hat, weiß ich gar nicht mehr, ob TIA überhaupt zu exzellenten Developer-Tools fähig ist.
Exzellente Developer-Tools funktionieren todsicher und skalieren in großen Teams, während TIA-Tools meistens nur im Happy-Case unter bestimmten Preconditions funktionieren.