Firmware oder Software – Das ist hier die Frage
„Ich sehe hier nur Softwareentwickler, haben Sie auch Firmwareentwickler?“, „Also wir haben nur eine Software-Abteilung, können Sie für uns Firmware entwickeln?“
Solche oder so ähnliche Fragen erreichen uns manchmal in Gesprächen mit Kunden. Aber was ist eigentlich der Unterschied zwischen Software und Firmware? Oder ist es gar dasselbe? Ein Erklärungsversuch.
Software? Oder doch Firmware?
Ganz allgemein lässt sich sagen: Firmware ist fest („Firm“) an die Hardware gebunden, für die sie entwickelt ist. Es besteht also eine Abhängigkeit der Firmware von der Hardware. Anders herum ist es aber genauso: Moderne Geräte haben fast immer einen Mikrocontroller an Bord, der ohne seine „Firmware“ einfach gar nichts macht. Die Hardware ist also ebenso von der Existenz und Korrektheit der dazugehörigen Firmware abhängig. Gemeinsam bilden sie ein so genanntes „Eingebettetes System“ (engl. „Embedded System“) – also das Zusammenspiel von einer elektrischen Schaltung und einem Programm, welches auf einem Mikrocontroller ausgeführt wird.
Zusätzlich greift eine Firmware allgemeinhin direkt auf die Hardware-Komponenten und Register des Controllers zu, auf dem sie ausgeführt wird. Sie steuert angeschlossene Bauteile über hardwarenahe Kommunikationsschnittstellen wie I²C oder SPI und sammelt so über Sensoren Informationen über die „echte“, physikalische Welt um sie herum oder verändert diese über Aktuatoren wie z.B. Motoren oder LEDs.
Das, was viele meinen, wenn sie von „Software“ sprechen, findet im allgemeinen viele, viele Abstraktionsschichten weiter oben statt: Eine Software wird vermeintlich nicht von einem Mikrocontroller ausgeführt, sondern von einem „richtigen Computer“. Ihr stehen viel mehr Ressourcen wie Rechenleistung oder Arbeitsspeicher zur Verfügung. Ein Betriebssystem wie Windows oder Linux kümmert sich um die direkten Hardwarezugriffe und bietet so eine komfortable Schicht zwischen der Software und der verfügbaren Hardware. Eine Software ist demnach im Allgemeinen auch auf mehreren, heterogenen Systemen lauffähig, so beispielsweise auf zwei Entwickler-PCs, die mit verschiedene Prozessoren oder verschieden viel Arbeitsspeicher ausgestattet sind.
Es wäre nun also ein Einfaches zu sagen: „Firmware“ läuft auf Mikrocontrollern, „Software“ auf „richtigen“ Computern. Aber so einfach ist es nicht: Gilt ein Betriebssystem schon als „Firmware“? Wie ist es denn mit Produkten wie Android, die auf einem Mobiltelefon ausgeführt werden? Es handelt sich streng genommen um ein eingebettetes System, mit einer Rechenleistung zwar, von der die NASA bei der Mondlandung geträumt hätte, aber eben doch mit einem Prozessor und viel Hardware drumherum auf einer Leiterplatte. Ist dies noch Firmware, oder schon Software?
Anders herum werfen wir einen Blick auf die Programme, die wir für eingebettete Systeme in von uns entwickelten Geräten schreiben: Große Teile der Software sind nicht für ein spezielles Gerät oder eine spezielle Hardware entwickelt, sondern können in vielen Produkten wiederverwendet werden. Bis auf die unterste Schicht der Software, nämlich jene, die direkt auf die Prozessor-Register zugreift, können sogar nahezu alle Treiber für Sensoren oder Aktuatoren auf andere Systeme portiert werden. Noch interessanter wird es, wenn wir auf dem eingebetteten System ein Betriebssystem wie zum Beispiel FreeRTOS einsetzen: Schreiben wir darauf aufbauend noch Firmware, oder schon Software?
Kurzum: Die Grenzen sind nicht klar definiert. Was früher noch eine einfache „Firmware“ mit begrenzten Ressourcen und viel Optimierungsbedarf war, wird heute immer größer, komplexer und speicherhungriger. Wir nutzen daher für beide Arten der Software, nämlich der „PC“-Software und der „eingebetteten“ Software einfach das selbe Wort: Software. Software für eingebettete Systeme ist eine Teilmenge davon. Unsere Softwareentwickler können folglich auch in beiden Disziplinen brillieren: Anwender-Software auf dem PC, Steuer-Software auf Servern und eben der eingebetteten Software auf von uns kundenspezifisch entwickelten Geräten.