english version english version

Die !Channel (ein Feature von IRCNet ircd 2.10)

Eine benutzerfreundliche Erklärung von Kaspar 'Kasi' Landsberg
Rückübersetzung ins Deutsche von Rico 'mc' Glöckner
Ein wenig komplettiert durch Mario 'BitKoenig' Holbe
    

Vorwort

Die folgende Erklärung setzt ein gewisses Grundwissen des Internet Relay Chat (IRC) voraus, u.a. Begriffe wie "Channel", "Nicks", "Server" und "Clients".
      

Einleitung

Die IRC-Server Version ircd2.10 (hauptsächlich im IRCNet verwendet) brachte einen neuen Typ von Channels mit sich: Eindeutige, nicht kollidierbare Channel, die "!Channel". Um den Sachverhalt besser verstehen zu können, die Situation vor ircd2.10 vorweg:

Die Vergangenheit

Wie du sicher weißt, existiert ein Channel nur, wenn mindestens ein Client in diesem Channel ist. Wie du sicher auch weißt, existiert ein Channel auf allen Servern eines spezifischen IRC-Netzes; das bedeutet, daß man auf jedem dieser Server diesen Channel joinen kann und trotzdem immer auf die selben Clients (Nutzer) stößt (falls der Channel schon vor deinem Join existierte, natürlich). Aber was passierte, wenn ein Server temporär vom Netz weggesplitted ist, also dieser Server für eine gewisse Zeit nicht mehr mit dem Rest des Netzes verbunden war?

Auf dem Server der weggesplittet ist und dann allein war, passierte grob gesehen folgendes: Alle Channel wurden zerstört (sie hörten auf zu existieren), außer denen natürlich, auf denen noch mindestens ein Client auf dem Server war, der weggesplittet ist. Auf der anderen Seite des Netzes passierte respektive das selbe. Falls vor dem Split Clients auf demselben Channel auf beiden Seiten waren (also ein Teil der Clients auf der einen, der andere Teil der Clients auf der anderen Seite des Splits), dann existierten direkt nach dem Split zwei Channels mit exakt demselben Namen, aber mit verschiedenen Clients (und vielleicht verschiedenen Modes) auf beiden Seiten. Mit diesem Wissen im Hinterkopf betrachten wir die Situation, die sich ergibt, wenn beide Seiten des Netzes (bis dahin getrennt) sich wieder verbunden haben, um wieder ein gemeinsames IRC-Netz zu formen.

Die verschiedenen Stati (Clients, Modes, etc) für denselben Channel auf beiden Seiten des Splits mußten nun zusammengefügt (synchronisiert) werden, damit auf den vormals getrennten Seiten des Splits der Channel wieder den gleichen Status hat (die gleichen Clients, die gleichen Modes). Dies wurde von den betroffenen Servern erledigt, und ist das, was du gesehen hast, wenn ein Server einen User oppte ("Server-Op") oder einen anderen Mode setzte ("Server-Modes"). Das passiert üblicherweise auch bei so genannten "Channel Takeovers", mit denen du vermutlich schon konfrontiert wurdest. Diese "Channel Takeover" waren ein offensichtliches Problem des vorherigen Channel Designs, da Channel in dem oben aufgezeigten Weg "kollidierbar" waren. Nun schauen wir uns einmal die Situation mit ircd2.10 an.

Die Gegenwart

Ein neuer ChannelTyp
Der IRCNet ircd in der Version 2.10 gibt uns die Möglichkeit von "unkollidierbaren Channels" durch Einführung eines neuen Channel-Typs, den ID-Channels ("!Channel"). Ein ID-Channel (oder einfach nur "!Channel", im Gegensatz zu "#Channel") ist nicht mehr, als ein Channel mit einer eindeutigen ID. Die Channel, die du kennst, haben die Form: #Channel_Name. Die neuen !Channel haben die Form: !<ID>Channel_kurzName, wobei <ID> eine eindeutige ID ist, die vom IRC Server nach einem mehr oder minder zufälligen Prinzip ausgewählt wird. Ein Beispiel eines solchen Channels könnte "!ABC23France" sein; dabei ist "!" der Channel-Prefix, der den ChannelTyp kennzeichnet, "ABC23" ist die eindeutige Channel-ID und "France" der kurze Channelname. Die Channel-ID hat immer eine Länge von 5 Zeichen, dies macht es unter anderem einfacher, den kurzen Channelnamen von der Channel-ID zu trennen.

Da jeder !Channel eine eindeutige ID hat, ist es "unmöglich", identische !Channel zu haben und dies macht die !Channel unkollidierbar. Hier die Grundregeln, die man beim Gebrauch von !Channels im Hinterkopf behalten sollte:

Jetzt, da du die Grundregeln bezüglich !Channels kennst, laß uns die dazu gehörigen Kommandos (speziell das JOIN Kommando) untersuchen. Eine Grundregel trifft auf die gesamte Kommando-Sektion zu:

Es ist möglich, daß dein IRC Client die !Channels (noch) nicht (vollständig) unterstützt. Falls eines der folgenden Kommandos also nicht funktioniert oder seltsames Verhalten hervorruft, dann ist es vermutlich der "Fehler" deines IRC Clients.

Hier eine Liste von grundsätzlichen Kommandos in Gebrauch mit !Channels:

Ein neuer User Mode
Zusammen mit den !Channels wurde ein neuer Usermode eingeführt, der eng mit den !Channels verbunden ist. Dieser neue Usermode wird automatisch demjenigen zugeteilt, der den !Channel erstellt hat; er wird damit zum "!Channel-Creator". Der !Channel-Creator wird mit dem Channelmode "+O" (auch als UNIQUE_OP bekannt) bezeichnet (nicht mit dem normalen Channel Operator "+o" verwechseln). Der Server gibt dir den "+O" Mode in jedem !Channel den du erstellt hast. Also, wenn du einen !Channel "foo" erstellst, dann bekommst du --wie gewohnt-- den Mode "+o" (Channel Operator) und du bekommst auch den Mode "+O" (!Channel Creator) für den !Channel "!<ID>foo".

Hier die Charakteristiken des neuen !Channel-Creator Modes (+O):

Ein neuer Channelmode
Zusammen mit den !Channels wurde ein neuer !Channel Mode, der "+r" ("reop") Mode, eingeführt. Nur ein Channel-Creator kann diesen Mode mit dem /MODE Kommando setzen oder löschen. Der Zweck dieses Modes ist es, oplose Channel zu vermeiden. Da !Channel eindeutig und unkollidierbar sind, ist es unmöglich "Server-Ops" in einem !Channel durch eine Channel-Kollision zu erhalten (Im Gegensatz zu normalen #Channels), wenn sie oplos werden.

Wenn der Channel also nicht oplos bleiben soll, wenn er es einmal war, dann muß der Channel-Creator den Channelmode "+r" auf diesem Channel setzen. Wenn dieser Modus gesetzt ist und der !Channel oplos wird und eine Weile bleibt, dann wird der Server automatisch und zufällig einige (oder auch alle) Clients in dem Channel re-oppen. Der Zufälligkeits-Algorithmus ist so programmiert, daß er die Chance, reoppt zu werden, nicht erhöht, wenn man viele Clones/Bots/Freunde den !Channel joinen läßt.

Die Zukunft

Das Hauptproblem des IRCNet - Nick Kollisionen - wurde bisher nicht behoben, wird aber in dem nah anstehenden Release 2.11 des IRCNet ircd angesprochen werden. Die Implementation der Lösung wurde in einem frühen Draft von Piotr "Beeth" Kucharski niedergeschrieben und kann hier gefunden werden.

Übrigens, die gesamte IRC Software sollte neu geschrieben werden :-)