Table of Contents

Ideas for a new Make alternative

Grundlegende Diskussion

Probleme

Probleme mit einem Make (ja, das meiste kann man mit hacks oder configurationen umgehen, aber dann ist der Bau prozess nicht mehr so simpel wie möglich):

Lösungsansatz

Es wird in einer “Schattenwelt” gearbeitet. Ein overlay verhindert, dass der Source Ordner verändert wird. Die Ergebniss-Dateien müssen expliziet durchgestochen werden, so dass die im eigentlichen Projektordner wieder landen.

Veränderungen in diesem overlay werden werden durch parallel laufende Tasks vorgenommen. Deren Ergebnisse müssen in den master-Overlay gemerged werden. Dies wird wie DB-Trannsaktionen behandelt. Es können also die selben konflikte auftreten:

Diese Konflikte müssen erkannt werden und zu einem Fehler führen. Dadurch ist ein konsistent wiederholbarer Bauprozess möglich, gleich welches Grad an paralelität eristiert.

Damit erkannt wird, welche Dateien gelesen und geschrieben werden, müssen die Zugriffe der gestarteten Bauprozesse Überwacht werden. Dabei sollten destruktive Zugriffe unterbrechbar sein (um um Zustimmeng des Nutzers zu fragen). Die gelesenen und geschriebenen Dateien werden Protokolliert (dependencies von *.c). Zudem werden die Bentzen resourcen protokolliert um beim nächsten durchgang den grad an möglicher Paralelität genauer zu bestimmen.

Weitere Überlegungen

Sind Ein- und Ausgabedateien von Tasks das richtige Mas um die Baureihenfolge zu bestimmen?

⇒ ggf. ausschließliches/zusätliches matching von Ausführbaren Tasks:

Tasks werden mit einer leeren umgebung ausgeführt. Umgebungsvariablen müssen explizit durchgereicht werden.

Der Task wird standartmäsig zum 1.1.1970 ausfeührt. Andere Daten müssen explizit durchgereicht werden.

Was wird mit Netzwerkverbindungen gemacht? Verbieten, Whitelists, Fragen, hashen (problem TLS), proxy (nur HTTP).

Was soll mit Symlinks passieren? Was, wenn sich ein Symlink von einer zur nächsten Ausführung ändert?

Siehe auch Gentoo's sandbox und Debian's fakeroot.

Beim Mergen Der Task-Overlays in den Master-Overlay nicht exakt wie weine DB-Vorgehen (nur tatsächlich paralell ausgeführte Tasks (transaktionnen) auf Konflikte testen), sondern alle aktionen von Tasks beachten, die hätten parallel ausgeführt werden können.

Das master-overlay darf nicht direkt auf den sourcen liegen, sondern auf einem Snapshot derer, so kann man während dem bauen an den sourcen weiter arbeiten.

Die Tasks dürfen auch nicht direkt auf dem master-overlay arbeiten. Nur Tasks, die aus dem selben Task-Set (Tasks die parallel ausgeführt werden dürfen) sind, können auf dem selben snapshot arbeiten. D.h. ein neuer master-snapshot muss nur erzeugt werden, wenn ein neues Taskset berechnet wird. Denn wenn die Tasks sagen, sie können gleichzeitig laufen, sind sie auch nicht auf die neusten files ihrer “mitläufer” angewiesen.

Probleme die Auftreten können + Lösungen

Problem:
Tasks, bei denen die Ausgabedateien nicht vorher bekannt sind, erstellen die selbe Datei.

Lösung:
Fehler + Programmabbruch. Der Benutzer muss das Fixen.

Problem:
Tasks liest die selbe Datei, die es auch Schreibt.

Lösung:
Maximale anzahl der Ausführungen der Task-Instanz festlegen.

Problem
selbes file wird von verschiedenen Tasks bearbeitet (Filter/Produuktionskette).

Lösung: