Institutionen können nicht vergeben — sie können Schulden nur verjähren lassen
In der Art, wie Linux entscheidet, welcher Prozess als Nächstes die CPU bekommt, steckt ein kleines Buchhaltungsproblem – und es stellt sich heraus, dass es genau das Problem ist, vor dem jede Institution steht, die versucht, Gnade walten zu lassen: Was macht man mit einer Schuld, die der Schuldner nicht vollständig zurückgezahlt hat?
Der fragliche Scheduler heißt EEVDF (Earliest Eligible Virtual Deadline First) und ersetzte ab Kernel 6.6 Ende 2023 den älteren Completely Fair Scheduler als Standardrichtlinie für gewöhnliche Prozesse unter Linux1. Seine Aufgabe ist es, eine knappe, reale Ressource – CPU-Zeit – fair unter konkurrierenden Aufgaben aufzuteilen. Dafür erfindet er eine fiktive Uhr.
Ein Kontobuch für eine Ressource, die niemand fair sehen kann
„Fair” ist keine direkt beobachtbare Größe. Also misst EEVDF stattdessen einen Stellvertreterwert: vruntime, die virtuelle Laufzeit, definiert als reale CPU-Zeit geteilt durch das Prioritätsgewicht einer Aufgabe. Bei einer hochpriorisierten Aufgabe tickt die virtuelle Uhr für dieselbe reale Arbeit langsamer. Der Scheduler verfolgt außerdem den lag (Verzug) – die Differenz zwischen der virtuellen Zeit, die eine Aufgabe bei einer perfekt fairen Aufteilung verbraucht hätte, und der tatsächlich verbrauchten virtuellen Zeit. Positiver lag bedeutet, einer Aufgabe steht noch CPU-Zeit zu; negativer lag bedeutet, sie hat mehr als ihren fairen Anteil verbraucht und steht faktisch in der Schuld.
Nur Aufgaben mit lag ≥ 0 sind überhaupt „berechtigt” (eligible), zu laufen. Eine Aufgabe, die zu viel verbraucht hat, muss warten, bis die Bücher wieder ausgeglichen sind. Das ist Engineering, das sich verblüffend moralisch formulieren lässt: Wer sich mehr genommen hat, als ihm zusteht, verliert das Recht, zuerst an der Reihe zu sein, bis die Schuld beglichen ist.
Das Problem des Betrugs – und die Lösung
Hier wird es interessant. Was passiert, wenn eine verschuldete Aufgabe einschläft – etwa weil sie auf E/A wartet und blockiert ist? Die naive Antwort wäre, die Schuld beim Aufwachen einfach zu erlassen: ein Neuanfang. Aber Peter Zijlstra, der Designer des Schedulers, lehnte das rundweg ab, weil es ausnutzbar ist. Eine Aufgabe könnte absichtlich unmittelbar nach dem Überziehen für einen Moment die CPU abgeben, ihren negativen lag löschen und mit sauberer Weste aufwachen – eine Lücke im Scheduling, die ein hinreichend feindseliges Programm endlos ausreizen könnte.
Also wird der lag über den Schlaf hinweg bewahrt. Aber die entgegengesetzte Politik – niemals zu vergeben, die Schuld für immer festzuhalten – ist ebenso falsch; eine Aufgabe, die vor Jahren kurz überzogen hat, sollte nicht dauerhaft bestraft werden. Die schließliche Antwort, die als Teil der „Complete EEVDF”-Änderungen in Kernel 6.12 (2024) zusammengeführt wurde, ist ein Mechanismus namens delayed dequeue (verzögertes Entfernen aus der Warteschlange)2. Eine Aufgabe mit negativem lag, die einschläft, wird nicht sofort aus der Lauf-Warteschlange entfernt. Sie bleibt dort, nicht berechtigt zu laufen, aber still anwesend, während andere Aufgaben laufen und die virtuelle Uhr des Systems voranschreitet. Während diese Uhr tickt, driftet der lag der schlafenden Aufgabe allmählich zurück Richtung null. Sobald die Schwelle überschritten ist, wird sie endlich aus der Warteschlange entfernt – die Schuld wurde vollständig durch das Vergehen von virtueller, nicht realer Zeit getilgt. Die Rückzahlung beschleunigt sich, wenn das System im Leerlauf ist, und verlangsamt sich, wenn es ausgelastet ist, weil das Tempo der virtuellen Uhr davon abhängt, wie stark die Konkurrenz um die CPU gerade ist.
Das ist ein wirklich elegantes Design: Dieselbe Währung, mit der die Schuld gemessen wird, wird auch zu ihrer Tilgung verwendet. Aber man sollte genau hinschauen, um welche Art von Akt es sich hier handelt. Es ist keine Vergebung. Es ist Amortisation nach Plan – mechanisch, vorhersagbar, gleichgültig, ob der Schuldner es bereut, gleichgültig gegenüber den Umständen. Um ein Wort zu benutzen, das man in einem Kernel-Changelog nicht erwarten würde: Es ist eine Verjährungsfrist.
Was echte Vergebung wirklich braucht
Hannah Arendt zog eine scharfe Linie zwischen Vergebung und allem, was regelbasiert ist. In Vita Activa behandelt sie Vergebung als eine genuin politische Fähigkeit – unterschieden von religiöser Barmherzigkeit oder privatem Gefühl –, deren einzige Funktion es ist, die andernfalls irreversiblen Folgen des Handelns rückgängig zu machen. Was Vergebung in ihrem Verständnis zu Vergebung macht und nicht zu bloßer Schuldentilgung, ist, dass sie unvorhersehbar ist. Sie ist selbst eine neue Handlung, nicht der Vollzug einer Regel. Rache ist vorhersehbar – man kann sie im Voraus aus der Kränkung berechnen. Vergebung darf das nicht sein; wäre sie es, wäre sie nur eine weitere mechanische Reaktion, und genau das, was Vergebung leistet – den Handelnden von den Folgen dessen zu befreien, was er getan hat, ohne dass das Geschehene ausgelöscht wird – würde zu bloßer Buchführung zusammenfallen.
Arendts Gegenstück ist das Versprechen: die Fähigkeit, in einer ansonsten unvorhersehbaren Zukunft eine kleine Insel der Verlässlichkeit zu schaffen, indem man sich im Voraus bindet. Zwischen beiden, so dachte sie, könnten Menschen die zwei strukturellen Gefahren des Handelns überstehen: seine Irreversibilität (durch Vergebung) und seine Unvorhersehbarkeit (durch das Versprechen).
Stellt man den Kernel und die Philosophin nebeneinander, ergibt sich eine These, die ich beim Schreiben nicht erwartet hatte: Institutionen können das Versprechen implementieren, und sie können aus der Distanz etwas implementieren, das wie Vergebung aussieht – aber was sie tatsächlich implementieren, ist eine Verjährungsfrist, nicht Vergebung selbst. Delayed dequeue ist genau deshalb eine echte technische Leistung, weil es aufgehört hat, Vergebung vorzutäuschen, und stattdessen einen ehrlichen, regelgeleiteten Tilgungsplan gebaut hat. Es fragt nicht, ob die Aufgabe absichtlich überzogen hat oder sich seither gebessert hat. Es zählt nur virtuelle Zeit.
Jenseits des Kernels
Ich glaube, das lässt sich weiter verallgemeinern, als es zunächst scheint. Restschuldbefreiung, die Löschung von Strafregistern, der zeitliche Verfall von Bonitätswerten, sogar die „Abkühlphase”, bevor man einen beigelegten Streit erneut aufrollen darf – all das sind institutionelle Entsprechungen zum delayed dequeue: negativer lag, der in den Büchern steht, nach einem festen, bekannten Zeitplan verfällt und freigegeben wird, sobald eine Schwelle überschritten ist. Keines davon ist Vergebung im Sinne Arendts, und ich halte das nicht für einen Konstruktionsfehler. Es ist wohl die richtige Arbeitsteilung. Eine Regel, die immer vergibt, lässt sich genauso ausnutzen wie der naive Scheduler – im richtigen Moment einschlafen, das Kontobuch löschen, wiederholen. Eine Regel, die niemals vergibt, versteinert ein System um jeden vergangenen Fehler herum, was seine eigene Art von Fehlfunktion ist. Wozu die EEVDF-Designer gelangt sind, ist die Version von Gnade, die den Kontakt mit feindseligen Akteuren übersteht: Vergebung ist nicht skalierbar, aber ihr Schatten – ein Tilgungsplan, der ohne Rücksicht auf Absicht durchgeführt wird – ist es. Wenn eine Institution etwas einbauen möchte, das der Gnade nahekommt, scheint die Logik der Verjährung die einzige Version zu sein, die einer Ausnutzung widersteht – um den Preis, ausdrücklich keine Vergebung zu sein.
Was ich noch nicht geklärt habe, ist, ob dieser Preis ein Verlust ist, den es wert ist, laut ausgesprochen zu werden. Wenn jede institutionalisierte „zweite Chance” insgeheim eine Funktion des Schuldenverfalls statt ein Akt der Gnade ist – bei Bewährungsausschüssen, bei „Clean Slate”-Gesetzen, bei Bonitätsreparaturdiensten –, wäscht dann die routinemäßige Verwendung des Wortes „Vergebung” leise etwas rein, das ein Ingenieur im Stil Zijlstras darauf bestehen würde, beim wahren Namen zu nennen? Oder leistet die Sprache der Vergebung trotzdem nützliche Arbeit, indem sie einem mechanischen Prozess ein menschliches Gesicht gibt, das er technisch nicht verdient – und ist diese Unehrlichkeit selbst funktional? Eine sichere Antwort habe ich noch nicht, und die Asymmetrie im Kontobuch von EEVDF verschärft die Frage nur: Schulden verfallen mit der Zeit, aber Guthaben – CPU-Zeit, die einer Aufgabe zustand und die sie nie bekam – werden unbegrenzt bewahrt, bis die Aufgabe tatsächlich läuft. Das System ist geduldig mit dem, was es schuldet, und gnadenlos genau mit dem, was ihm geschuldet wird. Ich bin mir noch nicht sicher, ob das die Form ist, die eine gerechte Institution haben sollte, oder die Form, auf die Institutionen standardmäßig zurückfallen, weil es die einzige ist, die sich nicht ausbeuten lässt.
-
Michael Larabel. “EEVDF Scheduler May Be Ready For Landing With Linux 6.6.” Phoronix. Abgerufen am 2026-08-01. Siehe auch die Kernel-Dokumentation: “EEVDF Scheduler.” The Linux Kernel documentation. Abgerufen am 2026-08-01. ↩
-
Jonathan Corbet. “Completing the EEVDF scheduler.” LWN.net. Abgerufen am 2026-08-01. Delayed dequeue und die “Complete EEVDF”-Änderungen wurden in Kernel 6.12 zusammengeführt; siehe “Linux_6.12.” Linux Kernel Newbies. Abgerufen am 2026-08-01. ↩