Software
Software Quantität, also Tempo und Speicherkapazität, die Software sorgt für […] die Abbildung der Anforderungen […] auf die strukturell primitive Hardware“<ref name="ludewig07" />:38
Obwohl dem Begriff ‚Software‘ teilweise Attribute wie Flexibilität, Individualität, Leistungsfähigkeit etc. zugeschrieben werden, wird letztlich alles, was der Computer ‚tatsächlich tut‘, nicht von der Software, sondern ausschließlich durch die Hardware ausgeführt. Software ‚beschreibt‘ lediglich, was getan werden soll und in welcher Form dies geschieht.
Dazu wird auf unterster Ebene der Maschinencode der Software unter Nutzung des Betriebssystems (d. h. ebenfalls durch dessen Maschinenbefehle) in den Hauptspeicher des Computers geladen und dem Rechenwerk Schritt für Schritt (siehe Befehlszähler) zur Ausführung zugeführt. Dieses Arbeitsprinzip gilt für jede Art von Software, auch wenn sie z. B. von Interpretern ausgeführt wird: Diese sind ebenfalls Software, deren Maschinencode an der Hardwareschnittstelle ebenfalls wie beschrieben ausgeführt wird und die Maschinenbefehle nur speicherintern erzeugen. Auch Compiler, Makroprozessoren und jede andere Art von Systemsoftware werden nach diesem Prinzip ausgeführt.
Der Maschinencode muss hierzu in einer Form/Struktur vorliegen, die von der Hardware über deren darin implementierte Schnittstelle interpretiert und ausgeführt werden kann.<ref>Klaus Wüst: Mikroprozessortechnik. Kap. 7.5.4 ISA – Instruction Set Architecture [1] Die ISA [Diese Form] ist genau das, was für die Erstellung von Maschinenprogrammen bekannt sein muss.</ref> Die Befehle zeigen durch ihren Inhalt und ihre Struktur an, was zu tun ist, welche Datenbereiche im Hauptspeicher dabei benutzt oder verändert werden sollen (über im Befehl enthaltene Adressierungsangaben) und ggf., an welcher Stelle das Programm fortzusetzen ist.
Bei der Ausführung wirken also viele Schichten zusammen und führen als Gesamtheit zu Zustandsänderungen in der Hardware bzw. final zu den vorgesehenen Ergebnissen, etwa der Ausgabe einer Druckzeile, einem Datenzugriff oder der Anzeige eines Feldinhalts am Bildschirm. Bei in höheren Programmiersprachen entwickelten Anwendungen können so schon für relativ einfache Funktionen (wie Lesen aus der Datenbank) oft Hunderttausende oder Millionen von Maschinenbefehlen durchlaufen werden.
Das in modernen Computern mögliche parallele Ausführen mehrerer Programme/Prozesse wird im Wesentlichen durch das Betriebssystem bewirkt, das bei bestimmten Ereignissen den Wechsel von einer zur anderen Task einleitet und verwaltet. Siehe auch Multitasking.
Im systematischen Zusammenwirken vieler Komponenten, das nur unter Anwendung klar definierter Schnittstellen möglich ist, „gehört Software also zu den komplexesten Artefakten, die Menschen bislang geschaffen haben“.<ref name="ludewig07" />:37
Die Software trägt zudem maßgeblich dazu bei, wie effizient die Hardware genutzt wird. Je nach Gestaltung der Algorithmen können mit derselben Hardware unterschiedliche Systemleistungen erreicht werden.
Entwicklung von Software
Die Entwicklung von Software ist ein komplexer Vorgang. Dieser wird durch die Softwaretechnik, einem Teilgebiet der Informatik, systematisiert. Hier wird die Erstellung der Software schrittweise in einem Prozess von der Analyse über die Softwaremodellierung bis hin zum Testen als wiederholbarer Prozess beschrieben.
In aller Regel wird die Software nach der Entwicklung mehrfach angepasst und erweitert. Der Software-Lebenszyklus kann durchaus mehrere Jahre betragen.
- Software wird unter Nutzung bestimmter Verfahren, Methoden und ‚Werkzeuge‘ entwickelt. Dabei werden unterschiedliche Entwicklungsstadien durchlaufen, in denen jeweils unterschiedliche Zwischenstände der Software entstehen: Analysetätigkeiten (zahlreiche Entwicklungsdokumente) > Programmierung (Quellcode) > im Betrieb (Maschinencode oder ausführbarer Code). Im engeren Sinn der Ausführung auf dem Computer gilt lediglich Letzteres als 'Software'. Siehe auch Softwareentwicklung.
- In diesem Zusammenhang ist Software Bearbeitungsgegenstand von Systemprogrammen: Wenn z. B. ein Compiler den Quellcode eines Programms liest, verarbeitet und einen Maschinen- oder Zwischencode erzeugt, so sind das aus dessen Sicht 'Daten'.
- Einmal erzeugte Software kann mit verhältnismäßig geringen Kosten vervielfältigt werden, die meist durch Datenträger, Werbung und dem Herstellen von Verpackung und zu Papier gebrachten Dokumentationen anfallen.
- Software verschleißt nicht durch Nutzung, unterliegt jedoch mit der Zeit der Softwarealterung.
- Software ist meist austauschbar, fähig zur Aktualisierung, korrigierbar und erweiterbar, insbesondere dann, wenn bestehende Richtlinien eingehalten werden und der Quelltext verfügbar ist.
- Software tendiert dazu, umso mehr Fehler zu enthalten, je komplexer sie ist.<ref name="FehlerInKomplexerSoftware_M.Ulich_Wired">Rajiv D. Banker, Srikant M. Datar, Dani Zweig: Software Complexity and Maintainability. (pdf) Proceedings of the Tenth International Conference on Information Systems, 1989, S. 247–255M.</ref> Fehler werden in aktualisierten Softwareversionen oder mithilfe eines Patches und i. d. R. nach Durchführung von Softwaretests behoben. Softwarefehler bezeichnet man auch als Programmfehler oder als „Bugs“.
- Weil Software unter Einsatz vieler unterschiedlicher Programmiersprachen und in vielen unterschiedlichen Betriebssystemen und Systemumgebungen entwickelt werden kann, sind Softwarestandards erforderlich, um Informationen system- und unternehmensübergreifend ‚verstehbar‘ und austauschbar zu machen. Siehe auch Elektronischer Datenaustausch (Beispiele), Programmierstil.
Auswahl von Software
In der Entscheidung zur Anschaffung von Software lässt sich i. W. der Einsatz von Standardsoftware oder die eigene Herstellung (Individualsoftware) unterscheiden. Besonders im betrieblichen Umfeld zieht diese Entscheidung häufig hohe Kosten nach sich. Auch können solche Entscheidungen Grundlage zur Umsetzung der Unternehmensstrategie sein oder sollen Unternehmensprozesse maßgeblich verbessern. Zur Vermeidung von Fehlinvestitionen sollte der Anschaffung ein systematischer Entscheidungsprozess vorausgehen.
Betrieb von Software
- Der Einsatz von Software erfordert je nach Einsatzbereich ein gewisses Maß an Organisation, um die zusammengehörenden Teile richtig einzusetzen und durch neue Versionen abzulösen (zum Beispiel in größeren Unternehmen im Releasemanagement).
- Mitunter kann Software vorkonfiguriert werden, um so eine Neuinstallation zu beschleunigen und um Fehler bei der Konfiguration zu minimieren.
Software aus Sicht der Betriebswirtschaft und Arbeitssoziologie
Im Wesentlichen für betriebliche Anwendungssoftware geltend kann Software aus (betriebs-)wirtschaftlicher Sicht als 'im Voraus geleistete geistige Arbeit', also als Investition betrachtet werden. Zum Beispiel erarbeiten die Programmautoren ein Lösungsverfahren für die korrekte Trennung aller deutschen Wörter in einem Textverarbeitungsprogramm. Damit ist im Voraus, also bevor diese Tätigkeit tatsächlich anfällt, schon für alle Schreiber, die mit diesem Textverarbeitungsprogramm arbeiten, die geistige Arbeit „korrektes Trennen deutscher Wörter“ geleistet. Dabei wird die Eigenschaft von Computern genutzt, auf sie verlagerte Aufgaben erheblich schneller und zuverlässiger ausführen zu können als dies bisher Menschen möglich war. Besonders auch in der Softwareentwicklung wird intensiv auf „im Voraus“ entwickelte Algorithmen und Codeteile – als Teile eines Programms – zurückgegriffen ('Software-Wiederverwendung').
Ein ähnlicher Zusammenhang wird in der Arbeitssoziologie gesehen: Derartige softwarebasierte Maßnahmen sind geeignet, Arbeitsinhalte und -Abläufe erheblich zu verändern. Die Bandbreite reicht dabei vom Bereitstellen einfacher Hilfsmittel (etwa zur Summierung oder Durchschnittsermittlung) bis hin zur völligen Umgestaltung von Prozessen (durch Konzentration früher getrennter oder durch Zerlegung früher zentralisierter Arbeitsabläufe) – oder gar bis zu deren vollständigen Ersatz durch IT-Lösungen. Brödner u. a. nennen dies „materialisierte“ Kopfarbeit.<ref>Der programmierte Kopf. In: P. Brödner, D. Krüger, B. Senf: Eine Sozialgeschichte der Datenverarbeitung. 1982, ISBN 3-8031-2082-9, S. 53.</ref> Siehe auch Rationalisierung, Optimierung, Taylorismus.
Kategorisierung von Software
Nach ISO/IEC 2382 wird Software wie folgt gegliedert (und bezeichnet):<ref>iso.org</ref><ref>Georg Herzwurm: Grundlagen von Betriebssystemen. Uni Stuttgart, 18. Januar 2006, S. 5(33), archiviert vom Original am 16. Juli 2014, abgerufen am 23. November 2015. </ref>
- Systemsoftware: Anwendungsunabhängige Software, die das Ausführen von Anwendungssoftware ermöglichen bzw. unterstützen (z. B. Betriebssystem, sowie Gerätetreiber und Dienstprogramme),
- Unterstützungssoftware, d. h. Programme, die bei der Entwicklung, Wartung helfen oder eine nicht-anwendungsspezifische Leistung erbringen (z. B. Editoren, Compiler, Virenscanner, Datenbankmanagementsysteme, …).
- Anwendungssoftware, die den Benutzer bei der Ausführung seiner Aufgaben unterstützt und ihm dadurch erst den eigentlichen, unmittelbaren Nutzen stiftet (z. B. eine Tabellenkalkulation)
Unterteilung nach dem Grad der Individualität
- Standardsoftware wird von einem Softwareanbieter, zum Einsatz bei mehreren/vielen Kunden erstellt, die diese Software erwerben können.
- Individualsoftware wird für einen einzelnen Anwender zur Lösung einer spezifischen Aufgabenstellung individuell erstellt, alternativ durch einen Softwareanbieter oder durch eigene Entwickler bzw. Entwicklungsabteilungen eines Unternehmens.
Rechtlich wird beim Erwerb von Software zwischen Individualsoftware und Standardsoftware unterschieden: Für Individualsoftware wird ein Werkvertrag bzw. Werklieferungsvertrag abgeschlossen, der Erwerb von Standardsoftware gilt als Sachkauf.
Unterteilung nach der Art der erzeugten Artefakte
Diese entstehen meist im Verlauf des Herstellungsprozesses von Software und können sein:
- Quellcode, Zwischencode, Maschinencode, Gerätetreiber und andere erforderliche Module (als Programmbibliothek ausgeliefert).
- Installationsprogramme und dazugehörende Anweisungen.
- Weitere Unterlagen wie die Dokumentation für Softwareentwickler und Softwarebenutzer.
Software nach der Art der Einbettung
- Nicht eingebettete Software, die nachträglich installiert wird.
- Fest in einem Gerät zu dessen Steuerung untergebrachte Software (z. B. in einem ROM oder als Teil eines eingebetteten Systems) bezeichnet man als Firmware oder auch als eingebettete (oder ‚embedded‘) Software.
Einstufung nach Nutzungsrecht (Lizenz)
- Adware,
- Beerware,
- Cardware (auch Postcardware),
- Careware,
- Crippleware,
- Donationware,
- Freeware,
- Nagware,
- Shareware und
- Freie Software.
Unterteilung nach Quellcode-Verfügbarkeit
Einstufung nach Verfügbarkeit
- Abandonware und
- Vaporware
Weitere Softwarebegriffe
- Portable Software: Auf verschiedenen Computer(typen) lauffähig.
- Native Software: Zur Ausführung auf einem bestimmten Computersystem erstellt oder kompiliert. Der Programmcode nutzt die individuelle Funktionalität eines bestimmten Systemtyps, Allgemeingültigkeit und Portabilität gelten nicht als Entwicklungsziel.<ref>Native Software, Enzyklopedia.com</ref>
- Bananenware (unausgereifte Software),
- Schlangenöl (Programm ohne echte Funktion, wird aber als Wundermittel angepriesen),
- Shovelware (Sammlung von Software, wobei die Quantität zählt),
- Riskware,
- Bloatware (mit Funktionen ohne synergetischen Nutzen überladene Software),
- Spyware,
- Gebraucht-Software.
Lizenzmodelle
Die Verbreitung und Nutzung von Software unterliegt dem Urheberrecht. Es gibt in diesem Zusammenhang mehrere typische Überlassungsmodelle:
- Verkauf
- Der vollständige Verkauf von Software, inklusive der Überlassung von Weiterverbreitungsrechten, kommt praktisch nur zwischen Unternehmen vor, in der Regel im Rahmen von Auftragsprogrammierung oder beim Verkauf eines Softwareentwicklungsunternehmens.
- Nutzungsrecht
- Bei der meisten Software, die zum Beispiel für PCs „gekauft“ werden kann, wird in Wirklichkeit nur ein Nutzungsrecht überlassen. Dieses Modell ist auch bei der Auftragsprogrammierung üblich, bei der ein Unternehmen ein Programm für den Eigengebrauch eines anderen Unternehmens speziell entwickelt. Bei Freeware ist dieses Recht kostenlos, was nicht mit freier Software verwechselt werden darf.
- Software as a Service
- Die Software wird bei einem Dienstleister gehostet, die eigentliche Nutzung der Software kann entweder pro Zeitraum oder pro Nutzungseinheit berechnet werden und kann oft mit einem einfachen PC und z. B. per Webbrowser genutzt werden.
- Freie Software/Open Source/GPL
- Freie Software darf von jedem genutzt, beliebig verändert und weiterverbreitet werden. Oft unterliegt dieses Recht gewissen Einschränkungen, wie zum Beispiel der Nennung des Autors oder die Verpflichtung, veränderte Versionen unter die gleiche Lizenz zu stellen (GPL). Software, die nicht zu dieser Gruppe zählt, wird proprietär genannt.
Zwischen den oben genannten Hauptformen der Softwareverbreitung gibt es zahlreiche Zwischen- und Mischstufen.
Freie Software und Open Source
‚Freie Software’ ist eine soziale Bewegung, die unfreie Software als gesellschaftliches Problem begreift.<ref>The Selected Essays of Richard Stallman (aktualisierte Fassung): „Open Source ist ein Entwicklungsmodell. Freie Software ist eine soziale Bewegung. Für die Open-Source-Bewegung ist nicht-freie Software eine suboptimale Lösung. Für die Freie-Software-Bewegung ist nicht-freie Software ein soziales Problem und freie Software ist die Lösung.“; ursprüngliche Fassung: „Für die Freie-Software-Bewegung ist freie Software ein ethisches Gebot … nicht-freie Software ist ein gesellschaftliches Problem …“</ref> Wobei „frei“ hier nicht „kostenlos“ bedeutet (‚Freie Software’ ist nicht dasselbe wie ‚Freeware’), sondern die Freiheiten für die Gesellschaft meint, die ein derart lizenziertes (auch kommerzielles) Produkt bietet. In den Augen der von Richard Stallman 1985 gegründeten Free Software Foundation (FSF) ist die Entscheidung für oder gegen freie Software deshalb primär eine ethische und soziale Entscheidung.
Dagegen begreift die 1998 gegründete Open Source Initiative (OSI) quelloffene Software als bloßes Entwicklungsmodell, wobei die Frage, ob Software quelloffen sein sollte, dort eine rein praktische und keine ethische Frage ist. Die FSF wirft der OSI daher eine Ablenkung von den wesentlichen Punkten vor.<ref>Warum Freie Software besser ist als Open Source auf: gnu.org</ref> Eric S. Raymond hat den Begriff ‚Open Source’ in der Annahme eingeführt, dass das unpopuläre Thema ‚Freiheit’ Geldgeber für solche Projekte abschrecken könne.
Auch wenn es sich heute um zwei unterschiedliche Bewegungen mit unterschiedlichen Ansichten und Zielen handelt, verbindet sie die gemeinsame Wertschätzung für quelloffenen Code, was in zahlreichen Projekten mündet, in denen sie zusammenarbeiten.
Siehe auch
Literatur
- John W. Tukey: The Teaching of Concrete Mathematics. In: The American Mathematical Monthly. Vol. 65, no. 1 (Jan. 1958), S. 2. (Erstmalige Verwendung des Begriffs Software im heutigen Sinn), JSTOR.
- F. R. Shapiro: Origin of the term software: Evidence from the JSTOR electronic journal archive. In: IEEE Annals of the History of Computing. 22 (April–Juni 2000), S. 69.
- Sebastian von Engelhardt: Die ökonomischen Eigenschaften von Software. In: Jenaer Schriften zur Wirtschaftswissenschaft. 14/2006, Friedrich-Schiller-Universität Jena, Wirtschaftswissenschaftliche Fakultät, ISSN 1611-1311.
Weblinks
- Software-Wiki
- Geschichte der Softwareprogrammierung
- Software’s origin (englisch)
- Ursprung des Wortes Software (englisch)
Einzelnachweise
<references />