Kaulin schrieb:
Na es ist eben kein all inclusive Paket. Es löst immernoch Abhängigkeiten auf und installiert zum Beispiel python nicht 5 mal. Jedes Programm kann dann auf die die python Version zugreifen.
Nein, das ist leider falsch. In dem Moment wo du mehrere Pakete (p1 und p2) in deine nix-Shell hineinziehst die verschiedene Versionen der gleichen Abhängigkeit (libA) benötigen, hast du auch unter nix einen Konflikt. Den kannst du auf zwei Arten versuchen zu lösen: Entweder gibt es Versionen von p1 und p2 die beide mit der gleichen Version von libA funktionieren, dann kannst du diese verwenden (auf Kosten der Aktualität mindestens eines der Pakete) oder du erstellst halt eine zweite nix-Shell.
Damit kommen wir zum Kern: Kennt man Python, kennt man evtl. virtenv. Und so würde ich mir nix vorstellen: Du erstellst hier Umgebungen. Im Idealfall hast du nur eine. Ansonsten halt mehrere...
Ich finde es schwer von Vor-/Nachteilen gegenüber Flatpak, Snap, Appimage zu sprechen. Das sind in der Regel ja keine Paketmanager sondern eher Anwendungs-Container-Lieferanten und werden immer öfter direkt von den Entwicklern einer Anwendung gepflegt.
Bei nix-OS ist man wie unter einem klassischen Linux noch immer selber dafür verantwortlich alles bereitzustellen. D.h. man ist darauf angewiesen, dass alle Abhängigkeiten paketiert sind oder muss fehlende Dinge selber paketieren.
nix-OS hat ganz andere Vorteile: Statt zig Konfigurationsdateien in /etc und Co. zu pflegen wird alles in einer zentralen Datei gemacht. In dieser beschreibt man sein System. nix garantiert dann, dass wenn man basierend auf dieser Datei ein neues nix baut, es Bit-für-Bit identisch mit dem Ausgangssystem ist. D.h. du kannst die CFG weitergeben und derjenige der damit sein nix baut, hat am Ende ein zu deinem identisches System. Zu jeder Zeit. Auch noch in 10 Jahren.
Das kann einem Endanwender evtl. egal sein. In der Software-Entwicklung ist so etwas aber hilfreich. Auch in der Wissenschaft: Wenn auf einem System heute Messungen durchgeführt werden will man evtl. in 10 Jahren diese noch einmal nachstellen und ist dabei wirklich auf exakt die gleiche Umgebung angegeben. Da kann es dann halt Unterschiede zwischen foo-9.18.12-1 und foo-9.18.12-2 geben.
Da nix-OS in der Regel die Pakete selber baut (es gibt auch Build-Services die Erzeugnisse bereitstellen), brauchst du lediglich das Quellpaket. Letzteres ist einfacher zu finden als bspw. ein Debian-Paket von vor 10 Jahren, denn Debian selber behält nur die letzte genutzte Version. Der Unterschied zu anderen Quell-basierten Distributionen ist, dass nix eben auch darauf achtet, dass die Build-Umgebung genau beschrieben. Würden hier nur kleine Details abweichen (andere {CF,LD,CXX}FLAGS, gcc-12.2.0-15 statt 12.2.0-14, Last-abhängige MAKEOPTS etc.) könnte sich das Erzeugnis vom vorherigen Build unterscheiden und ist damit nicht mehr identisch.
Ein weiteres nettes Feature sind atomare Updates und Rollbacks: Wer keine Rolling-Distribution verwendet wird sich evtl. fragen was atomare Updates einem bringen. In der Regel läuft hier ja alles. Spaßig wird es aber wenn auf die nächste Major-Version ("apt-get dist-upgrade") aktualisiert wird. Hier kann sich während des Prozesses erst herausstellen, dass Pakete zueinander inkompatibel sind (oftmals, weil man verschiedene Repositories gemischt hat). Dank eines atomaren Updates ist sichergestellt, dass das Upgrade durchlaufen wird.
Und sollte das aktualisierte System dann doch einmal Probleme machen kann man schmerzfrei weil sicher und zuverlässig jederzeit ein Rollback machen.
Die Frage ist: Wie sehr kann man sich auf dieses System einlassen? Will man bspw. den root-Login via SSH erlauben, könnte man einfach /etc/ssh/sshd_config anpassen und die Zeile "permitRootLogin yes" ergänzen und nach einem Neustart des Dienstes wäre der Login als root möglich.
Das kann man auch unter nix OS tun, beim nächsten Aufruf von "nixos-rebuild" ist das aber wieder weg.
Der richtig Weg unter nix OS wäre stattdessen /etc/nixos/configuration.nix zu editieren und dort ein /services.openssh.permitRootLogin = "yes";/ hinzufügen. Nachdem man dann "nixos-rebuild" aufgerufen hat befindet man sich in einem System wo dann der Login als root möglich ist.