Debians Diskussion über »which«

Debian Swirl

Which way?

Das Shell-Script which ist ein nicht standardisiertes, externes Werkzeug, das eine ausführbare Datei im gegebenen PATH findet. Es gibt verschiedene Varianten von which in Linux und BSD, die sich bei den verfügbaren Optionen unterscheiden. Ich verwende die bei Debian im Paket debianutils enthaltene Version oft, um zu sehen, ob ein Paket auf einer Installation vorhanden ist. Kurz und schmerzlos sah das bis vor kurzem so aus:

$ which apt
/usr/bin/apt

Wer which in den letzten Monaten in Debian Sid genutzt hat, bekam aber zusätzlich eine Warnung zu sehen:

$ which apt
/usr/bin/which: this version of `which' is deprecated; use `command -v' in scripts instead.
/usr/bin/apt

Wie es dazu kam und was daraus wurde, zeigt exemplarisch, wie Debian sich selbst reguliert.

Entzündet hat sich die Diskussion im letzten Jahr an der Option -s, die bei FreeBSD vorhanden ist, bei der Debian-Version jedoch nicht. Entwickler Erik Gustafsson hielt dieses Flag, das die Druckausgabe unterdrückt und den Exit-Status abhängig von der Existenz des abgefragten Programms setzt, für so nützlich, dass er gleich einen Patch mitlieferte.

Nicht POSIX-konform

Damit setzte eine Diskussion über den Wert des nicht POSIX-konformen which und ob es in Debian erweitert werden sollte. Im Verlauf der Diskussion wurde Clint Adams, Co-Maintainer der debianutils auf die Diskussion aufmerksam und befand, eigentlich sollte which aus dem essenziellen Paket debianutils entfernt werden, da mit command -v eine POSIX-konforme Alternative bereits vorhanden sei. Ich muss gestehen, ich habe von command -v nie zuvor gehört, und ich denke, ich bin damit nicht alleine.

Vor einigen Monaten fiel einem Entwickler die oben erwähnte Warnung auf, die mit debianutils 5.0.1 eingeführt worden war und which als deprecated (überholt) bezeichnete. Dies führte zu zahlreichen Anfragen nach einer Rückgängigmachung der Änderung. Einer der Gründe war, dass which als Begriff wesentlich griffiger sei als die Alternativen. Zudem sei es im Muskelgedächtnis vieler Anwender vorhanden. zudem stellte sich heraus, dass eine Reihe von Build-Skripten für Debian-Pakete ebenfalls which verwenden.

Mehr Schaden als Nutzen

Adams Position in der Sache wurde schwächer, obwohl sein Argument, dass es zahlreiche Varianten von which gibt und es somit wenig Sinn ergebe, eine bestimmte Version in einem Paket auszuliefern, das als essenziell gekennzeichnet ist und damit auf jedem Debian-System installiert sein muss, eigentlich stichhaltig ist. Die meisten Entwickler waren nicht gegen die Entfernung von which aus den debianutils, es bestand aber keine Einigkeit, wie das geschehen sollte, ohne größere Disruptionen zu erzeugen.

Das Technische Komitee eingeschaltet

Da zumindest ein Paket (tensorflow) beim Bau an der eingefügten Warnung scheiterte und keine Einigung über das Vorgehen in Sicht war, schaltete Adrian Bunk das Technische Komitee ein, die Sache zu entscheiden. Seine Hauptforderungen waren, dass which weiterhin von einem essenziellen Paket bereitgestellt werden solle und die Warnung zu entfernen sei.

This sort of whichcraft is how Debian has managed to keep hundreds of independent-minded developers working toward a common goal for the better part of three decades.

Jonathan Corbet, Editor at LWN

Mitte Oktober gab das Komitee nun seine Entscheidung bekannt. Einigkeit bestand darin, dass debianutils weiterhin which bereitstellen muss, zumindest so lange, bis es in ein anderes essenzielles Paket überführt wurde. Eine Mehrheit der Komitee-Mitglieder beschloss zudem, die Warnung zu entfernen. Viele Leser mögen dies für verschwendete Zeit über Nichtigkeiten halten, aber dieses Vorgehen ist ein wichtiger Teil der Art und Weise wie Debian sich selbst reguliert. Paket-Maintainer haben bei Debian viel Macht über die von ihnen betreuten Pakete und manchmal schießt jemand über das Ziel hinaus. Dann gibt es Regularien, das wieder einzufangen, mit denen Debian fast 30 Jahre lang gut gefahren ist.

Als Quelle für diesen Artikel diente der Artikel Debian’s which hunt auf LWN, der derzeit noch hinter der Paywall steht.

Kommentare

23 Antworten zu „Debians Diskussion über »which«“

  1. Avatar von tuxnix
    tuxnix

    Toller Artikel. Danke dafür.

  2. Avatar von Uxx
    Uxx

    Warum setzen die in ihrer Standardshell und ggf. in Bash einfach einen alias auf command -v und der Rest bekommt halt die Warnung?
    Bis dato hatte ich auch noch nie etwas von command -v gehört und etliche meiner Skripte nutzen which 🙂

    1. Avatar von Ferdinand

      Die Idee hatten die Jungs auch, setzte sich aber nicht durch. Kann ja aber jeder selbst in die .bashrc malen.

      1. Avatar von kamome
        kamome

        Im Technischen Ausschuss sitzen nicht nur Jungs!
        Und danke, über das -v war ich auch noch nicht gestolpert!

        1. Avatar von Ferdinand

          Hab ich da was von Jungs geschrieben? Ich kann’s nicht finden.

          1. Avatar von died0r
            died0r

            > Die Idee hatten die Jungs auch, setzte sich aber nicht durch. Kann ja aber jeder selbst in die .bashrc malen.

            vor zwei Stunden

          2. Avatar von Ferdinand

            Ach, als Kommentar, ich hab im Text geschaut. Naja, Asche auf mein Haupt, und ich tu’s nie wieder. 🙂

          3. Avatar von kai
            kai

            Denke, kamome hat sich nur einen Spaß gemacht,
            obwohl, heute weiß man ja nie…

            Ich wußte gar nicht, daß auch Mädels (darf man das denn sagen ?) im Tec-Ausschuß sitzen, wer denn z.B.?

            Gruß
            Kai

          4. Avatar von kamome
            kamome

            Das war zwar mit einem (vergessenen) Zwinkern gedacht, aber durchaus ernst gemeint – warum auch nicht? Wenn auch kein Genering-Freund, explizit ausschließen wollte Ferdinand sie sicher nicht – hier die Liste der aktuellen Mitglieder:
            https://www.debian.org/intro/organization#tech-ctte

          5. Avatar von Ferdinand

            Richtig, ich bin kein Freund vom Gendern, ich denke, es ist eine Schande für unsere Sprache, die ich genauso achte wie generell alle Frauen. Dass ich sie hier nicht inkludiert habe, resultiert daraus, dass ich deren Vorhandensein im Komitee nicht auf dem Schirm hatte.

          6. Avatar von Juchtel
            Juchtel

            Genau deshalb das Gendern, dann macht man es automatisch richtig….
            Sprache war und ist immer etwas Dynamisches, dass sollte man nicht vergessen…..

          7. Avatar von Ferdinand

            Derzeit sind tatsächlich 2 Frauen im Komitee, wechselt ja immer mal.

          8. Avatar von kermet
            kermet

            Man kann sich heute nicht mehr nur allein auf den Namen verlassen, man muss auch prüfen, ob wirklich kein Y Chromosom dabei ist, wenn man wissen will, ob es eine echte Frau ist.

  3. Avatar von Markus Barthel
    Markus Barthel

    Ich finde nicht, dass der Maintainer übers Ziel hinausgeschossen ist als er which für deprecated erklärt hat, sondern dass er Recht hat. Wenn man zwei Befehle hat, die das gleiche tun, nimmt man den standardisierten Befehl.
    Das „which“ verwendet wird, ist ebenfalls kein Argument, den erstens klingt das so wie „das haben wir immer so gemacht“ und zweitens ist das doch mit einem einfach alias geregelt.

    1. Avatar von kermet
      kermet

      So sehe ich das auch.
      Eine saubere Lösung wäre gewesen, wenn man die Pakete und Skripte, die nicht mit der Warnmeldung umgehen können, an den Posixkonformen Befehl commit -v angepasst hätte.

      Für alle anderen hätte ein alias oder ein optional installierbares whichpaket gereicht.

  4. Avatar von died0r
    died0r

    Damit bloated Debain noch weiter auf. Unnötige Dinge bitte rauswerfen. Dann sollen die Softwareentwickler bitte ihren Job vernünftig machen.

    1. Avatar von kamome
      kamome

      Can Du me mal vertellen wie Debian da aufbloated should, indem discussed wird, if ein part eines packages rausfliegt? SCNR

  5. Avatar von DerEremit
    DerEremit

    Ist mir noch nicht aufgefallen. Oder ich habe das mit sehendem Auge verdrängt. Gewöhne ich mal schon an command -v. Kannte ich bisher nicht. Noch geht which. Und so schnell schießen die bei Debian auch nicht dass das aus debianutils verschwindet.

  6. Avatar von 123
    123

    zur Ergänzung, ein „Superuser-Befehl“ kann so abgefragt werden:

    command -v sudo dhclient

    1. Avatar von 123
      123

      sorry, habe hier völligen Quatsch geschrieben! 🙁

  7. Avatar von gosh
    gosh

    ui, which – lange nicht mehr genutzt.
    Bei mir war immer whereis angesagt,
    z.B. rufe ich: ‚Wo ist die Katze‘? Nicht: ‚welche Katze‘? 🙂
    //
    $ whereis cat
    cat: /usr/bin/cat /usr/share/man/man1/cat.1.gz
    $ which cat
    /usr/bin/cat
    $
    //

    ps.: danke fuer den schoenen Artikel, Ferdinand

    1. Avatar von kermet
      kermet

      Bei mir war einfach Buchstaben eingeben und dann Tab-Taste drücken angesagt.
      Das ging schnell genug.

      Für Skripte ist das so natürlich nicht brauchbar, aber dafür hat man ja nun den Befehl command -v
      Ich habe das bisher nicht für Skripte benötigt.

  8. Avatar von perko
    perko

    „Mitte Oktober gab das Komitee nun seine Entscheidung bekannt. Einigkeit bestand darin, dass debianutils weiterhin which bereitstellen muss, zumindest so lange, bis es in ein anderes essenzielles Paket überführt wurde. Eine Mehrheit der Komitee-Mitglieder beschloss zudem, die Warnung zu entfernen.“

    Das erinnert an die jetzt im Moment statt findende Klimakonferenz in Glasgow, „Ja wir wissen und geben zu dass wir das irgendwann mal tun müssen, der Termin steht noch nicht fest, wir konnten uns nicht einigen wann“ Kein Termin, keine bindenden Zusagen. Vertagen wir erst auf ein nächstes Treffen, auf die nächste Klimakonferenz.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert