Hallo,
um das "Aha." noch etwas zu konkretisieren:
Manuelle, dynamische Speicherverwaltung will man nicht. Stimmt. Rein statisch (oder vollständig extern überwacht) ist für OS-Development allerdings schwierig bis unmöglich.
Fast alle deine Punkte laufen auf drei Ansätze hinaus:
- Codeausführung ausschließlich unter Aufsicht eines Hypervisors als "managed code only" (vgl. Java, .net und Scriptsprachen)
- saubere Schnittstellen, an denen jeweils geprüft wird, ob Unsinn hinein- oder hinauskommen soll
- try/except um jeden Codeblock herum
Alle Ansätze führen allerdings nicht zu besserem Code. Sie ermöglichen im Gegenteil, dass die Codequalität nahezu beliebig schlecht werden kann, weil die Runtime alle Probleme für dich auffängt. Java kippt ja auch grundsätzlich einen Stacktrace auf die Straße, wenn mal irgendwas schief geht. Außerdem landet in den oberen Schichten nur ein allgemeiner Fehler, wenn irgendwas schief läuft (Extrembeispiel: "Webseite kann nicht angezeigt werden." - egal, ob das nun kaputter HTML-Code, ein OOM in der HTTP-Lib war, der DNS-Resolver nichts findet oder der Ethernet-Treiber hustet. Fehlersuche ist dann doof.)
Gegen Garbage Collection habe ich persönlich etwas (leider nichts effektives), weil es die Latenz der Anwendung in die Höhe treibt. Als Beispiel kann man sich da Minecraft anschauen, bei dem die meisten "Optimierungen" in geschickteren Einstellungen des GCs liegen.
Und ein Hypervisor kann auch nur begrenzt Dinge erkennen und abfangen, da er ja eine turing-vollständige Welt abbildet. Die ganze Virtualisierung von Servern geht in die gleiche Richtung. Aber ob ein Einbruch in den Server oder in eine (schlecht konfigurierte) VM geschieht, ist mir egal - der Angreifer hat die Daten und damit sein Ziel erreicht.
Nicht zuletzt müssen Runtime und Hypervisor bis zu einem gewissen Grad außerhalb dieser Ideen entwickelt werden, weil sie eben systemspezifisch und ziemlich komplex sein müssen, um gute Performance zu liefern.
Für mich klingen deine Vorschläge wie aus einem Uni-Script abgeschrieben. Sinnvoll, aber nicht (überall) sinnvoll umsetzbar.
Und sie verlagern das Problem auf andere.
Gruß,
Svenska