IRCd

IRCd (ang. Internet Relay Chat daemon) - program implementujący serwer IRC, działający jako demon. Ze względu na to, że nie przyjęła się jedna wersja protokołu komunikacyjnego IRC, często różne wersje IRCd nie są ze sobą kompatybilne.

IRCd realizuje kilka podstawowych funkcji umożliwiających funkcjonowanie sieci IRC:

  • przyjmuje i odbiera strumień informacji od wszystkich przyłączonych do niego aktualnie użytkowników IRC;
  • jeśli pracuje w sieci wieloserwerowej, realizuje przekazywanie i przyjmowanie strumienia informacji do oraz z innych serwerów;
  • przechowuje i na bieżąco uaktualnia listę użytkowników i kanałów.

Większość oprogramowania serwerów IRC jest oparta na wolnej licencji GNU General Public License, choć istnieją też wersje komercyjne. Jakkolwiek dostępne są wersje tego oprogramowania na wiele systemów operacyjnych, olbrzymia większość z nich działa pod systemami typu Unix (Linux, IRIX, FreeBSD itp).

Historia rozwoju i wersje IRCd

Pierwszy program implementujący serwer IRC został napisany przez Jarkko Oikarinena w 1989 r. Znany jest pod nazwą ircd. Pierwotna wersja ircd miała liczne wady, często się zawieszała i nie miała opracowanego skutecznego systemu wymiany danych między serwerami na skutek czego niemożliwe było skonstruowanie sieci liczącej więcej niż 3 serwery. Właściwy rozwój IRC zaczął się dopiero od IRCd 2.2+msa, który z pomocą Oikarinena napisał Markku Savela. Ówczesny IRC był pod wieloma względami odmienny od obecnie używanego. Na przykład kanały nie miały nazw tylko numery, a wybór kanału dokonywano na podstawie jego topicu, który wyświetlał się po użyciu komendy list.

Wersje 2.3-2.6

Wersje od 2.3 do 2.5 były rozwijane przez ciągle spierających się z sobą właścicieli spontanicznie powstających serwerów IRC, co powodowało chaos w kodzie i ciągłe zmiany kierunku rozwoju tego oprogramowania. W tym czasie istniała w zasadzie tylko jednak sieć IRC, która miała charakter zupełnie otwarty. Każdy kto dał radę postawić serwer mógł się przyłączyć nim do pozostałych. Spowodowało to jednak, że topologia sieci była całkowicie chaotyczna i wiele osób stawiało serwery tylko po to aby uzyskać status operatora serwera i móc przejąć tym sposobem jakiś kanał. W 1990 r. powstała organizacja o nazwie EFnet, która ustanowiła pierwsze reguły określające zasady przyłączania kolejnych serwerów do sieci i narzucająca rodzaj kodeksu administratora, zakazującego mu pewnych działań. Grupa serwerów, które znalazły się poza EFnetem utworzyła A-net (Anarchy net), która jednak z powodu kompletnego chaosu i sporów, wkrótce zanikła.

Wersja IRCd 2.5 została gruntownie uporządkowana już w ramach EFnetu. Dodano w niej możliwość tworzenia kanałów posiadających nazwy tekstowe (pierwotnie jako znaku kanału używano "+" a nie "#") i wydłużono nazwy nicków do 8 znaków. Wzrastająca popularność EFnetu powodowała jednak, że sieć ta bardzo cierpiała na częste splity i trudności z zalogowaniem się do serwerów, gdyż tempo powstawania kolejnych serwerów było wolniejsze od wzrostu liczby użytkowników.

Wersja 2.7 i powstanie Undernetu

W trakcie pracy nad IRCd 2.7 w 1992 r., część właścicieli serwerów EFnetu zdecydowała się stworzyć odrębną sieć, początkowo tylko po to aby testować w niej nowe rozwiązania techniczne, nazbyt nowatorskie aby je od razu zaimplementować w EFnecie. Testowy IRCd uzyskał nazwę icru i był od tej pory rozwijany niezależnie. Ze względu na to, że nowa sieć zyskała sporą popularność, zdecydowano się jej nie zamykać po zakończeniu prac na IRCd 2.7. Undernet do dzisiaj ma charakter sieci "dla wtajemniczonych", w której testuje się rozmaite, techniczne nowinki. M.in. to właśnie w tej sieci wprowadzono po raz pierwszy serwis umożliwiający rejestrację kanałów i pseudonimów. W icru po raz pierwszy zaimplementowano też bramkę zwaną CSservice - umożliwiającą zarządzanie serwisami rejestrującym przez stronę WWW.

Wersja 2.8 i Wielki Split

IRCd 2.8 był przełomową wersją, gdyż poza Undernetem, został on zaakceptowany przez wszystkie większe sieci IRC i prawie wszystkie późniejsze wersje IRCd wywodzą się z 2.8 i są z nią zazwyczaj wstecznie zgodne. Lista komend dopuszczalna w IRCd 2.8 stała się swoistym kanonem, który jest zaimplementowany we wszystkich klientach IRC. W ramach IRCd 2.8 wprowadzono dłuższe, 16-znakowe nazwy kanałów i nicków, przyjęto znak "#" jako wyróżnik zwykłych kanałów "!" dla kanałów szczególnie chronionych i "&" dla kanałów lokalnych - funkcjonujących tylko w ramach jednego serwera.

W 1996 nastąpił tzw. wielki split, który spowodował podzielenie się EFnetu na sieć głównie amerykańską (zwaną dalej EFnetem) oraz "resztę świata" (głównie Europę), która nazwała się IRCnetem, nawiązując tym do pierwotnej idei Oikarinena. W ramach IRCnetu ustalono dość ścisłe regulaminy dla właścicieli serwerów, oraz podjęto prace nad ustanowieniem "oficjalnej" specyfikacji protokołu IRC, co zaowocowało wydaniem serii dokumentów RFC, na podstawie których działa IRCnet. Pozostałe duże sieci IRC ignorują jednak RFC IRCnetu. W ramach IRCnetu ustanowiono oficjalną grupę programistów, którzy rozwijają w kontrolowany sposób IRCd, wypuszczając kolejne jego oficjalne wersje. W ramach IRCnetu rozwijana jest tzw. główna linia IRCd, która jest numerowana poczynając od 2.8, a więc 2.9, 2.10, 2.11 itd. Ta linia IRCd ma ściśle zdefiniowany protokół komunikacji między serwerami, który uniemożliwia przyłączanie do nich serwerów spoza tej serii.

IRCd-hybrid i pochodne

W EFnecie pozostawiono większą swobodę działania programistów. Powstały tam dwie odmiany IRCd 2.8 - 2.8+CS i 2.8+th, które funkcjonowały równolegle. Później, włączono do kodu 2.8-th pewne fragmenty CS i powstał w ten sposób IRCd-hybrid - który jest nadal rozwijany przez duży zespół programistów. IRCd-hybrid posiada nieco inny schemat flag niż "kanoniczny IRCd 2.8", umożliwia zaimplementowanie flagi tzw. "półopa" oraz posiada możliwość dołączania modułów zmieniających protokół komunikacji między serwerami oraz dodawanie do sieci różnych wariantów serwisów dodatkowych. IRCd-hybrid, mimo że wywodzi się z EFnetu, rozwija się w oderwaniu od konkretnej sieci, próbując ustanowić ponadsieciowy standard. Jego mutacje z różnymi modułami komunikacyjnymi i serwisowym są rozwijane w ramach samych sieci. M.in:

  • IRCd-ratbox - obecnie zalecany IRCd EFnetu
  • IRCd-hyperion - na którym od 2005 do 2010 działała sieć freenode[1]
  • IRCd-bahamout - na którym działa DALnet

i wiele innych

Oprócz dwóch głównych historycznych linii rozwojowych IRCd, opartych na licencji GNU General Public License, istnieją też serwery IRC, które były tworzone od zera bez korzystania z kodu objętego tą licencją. Zalicza się do nich m.in:

  • UnrealIRCd - prosty w konfiguracji i popularny w przypadku małych sieci serwer IRC.
  • IRCX - na którym działa korporacyjna sieć IRC Microsoftu i którą Microsoft oferuje też w wolnej sprzedaży
  • ConferenceRoom produkcji Webmaster Inc - komercyjna wersja IRC przeznaczona głównie do używania przez bramki WWW oparte na apletach Java, sprzedawana razem z narzędziami do tworzenia profesjonalnie wyglądających bramek IRC

i wiele innych.

Schemat rozwojowy IRCd

Schemat rozwojowy IRCd wywodzącego się od oryginału Oikarinena można przedstawić następująco:

    ircd (Oikarinen, 1989)
                 |
                IRCd 2.2 (Oikarinen, Savela, 1990)
                 |
                IRCDd 2.2-2.5 (liczni, spontaniczni deweloperzy, 1990-1993)
                 |
                IRCDd 2.5+ (EFnet team, 1992-1993)
                 |
                IRCDd 2.6-2.7 (EFNet team, 1993-1995) → icru 2.1-2.7 (Undernet team, 1992-)
                 |
                IRCd 2.8 (wersja EFNet, 1996) → IRCd 2.8-2.11 (IRCNet, 1996-) 
                 |
                IRCd 2.8+CS (Comstud, 1995) i IRCd 2.8+th (Taner, 1995) 
                                        |
                IRCd-hybrid2 (Jon 'Rodder' Lusky i Diane 'Dianora' Bruce, 1996) → IRCd-hybrid 3-7
                       |                |               |            |
                   IRCd-ratbox     IRCd-hyperion  IRCd-bahamout    wiele innych...
                    (EFnet)           (Freenode)       (DALnet)

Lista znanych IRCd

IRCdTwórcy/Obsługiwana siećŹródłoJęzyk programowaniaPierwsze wydanieOstatnie wydanieLicencja udostępniana
BahamutDALnetDreamForge i HybridC2002bahamut-1.8(03)GPL
chaosircdRoman Sennnapisane od zeraC2003?GPL
ConferenceRoomWebMaster IncorporatedOd zeraC++1996ConferenceRoom/3.0komercyjny
dancer-ircdFreenode (obecnie porzucony)Hybrid 6C?(zastąpiony przez hyperion-ircd)GPL
DreamForge IRCdDALnet (obecnie porzucony)?C?(Wymieniony na bahamuta)GPL
Microsoft ExchangeMicrosoftIRCXC (Theorised)1997(~6.0.6249.0 / Service Pack 3 ?)komercyjny
hyperion-ircdFreenodehybrid6-dancer-ircdC2002hyperion-1.0.2(230)GPL
ignitionServerThe Ignition ProjectPure-IRCD (VB6 version)Visual Basic2004ignitionServer-0.3.6-P1.20050515GPL
InspIRCdChatSpike, Brain, Craig, et al.Od zeraC++2002InspIRCd-1.2.00GPL
IRCDIRCnetoryginalny ircdC1988irc2.11.1p1GPL
IRCD-HybridIRCD-Hybrid Development Teamirc2.8 (IRCD)C?ircd-hybrid-7.2.1?
ircd-ratboxEFnet2.8/hybridC?ircd-ratbox-2.2.9GPL
ircuUndernet Coder Committeeirc2.7 (IRCD)C1993ircu2.10.12.04GPL
IRCXpro ServerIRCXpro, MicrosoftIRCPlusVisual Basic??komercyjny
Nefarious IRCuEvilnet Development, AfterNETircu2C2004u2.10.11.07+Nefarious(0.4.0)+[1.347]GPL
PTlink IRC ServerPTlink IRC Softwareircd-hybrid6C2001 (v.6)Hybrid6/PTlink6.19.6GPL
QuakeIRCdQuakeNet developement teamUnrealIRCdC1997QuakeIRCd-1.8GPL
UnrealIRCdUnrealIRCd TeamDreamForgeC1999Unreal3.2.5GPL
UltimateIRCdShadowRealm CreationsDreamForgeC?UltimateIRCd(Tsunami)-3.0(01)GPL

Przypisy

  1. Historia freenode (ang.). [dostęp 2015-12-15]. [zarchiwizowane z tego adresu (2006-11-04)].

Bibliografia