[Hackathon] Emacs ile IRC bağlantısı üzerinden Canl Kodlama ve bilgi paylaşımı hakkında

Mert Gör mertgor at qbnetworks.xyz
Mon May 4 07:28:12 +03 2026


Güncel metin :

Hedef - Soru :

IRC ağı üzerinde canlı kodlama

yani Emacs ERC ile bağlı iken sunucunun bir alt etki alanında kanalda yetkili kişiler aynı anda kod yazabilecekler.

Emacs de bunu bir ek buffer olarak gösterecek. Kod ister bir sunucuda derlenecek yani kodlanacak isterse de kişinin oturum açtığı makinesinde veya karşı tarafa da kod gidebilecek.

Lisp bunu yapabilir mi ? Emacs Lisp yani ?

Cevap :

Evet, Emacs Lisp (Elisp) bunu kesinlikle yapabilir. Emacs sadece bir metin düzenleyici değil, çalışma zamanında (runtime) kendini değiştirebilen bir Lisp makinesi olduğu için hayal ettiğiniz bu senaryoyu gerçekleştirmek için oldukça uygundur. [1]
Bu senaryoyu hayata geçirmek için kullanabileceğiniz yöntemler ve Elisp'in sunduğu yetenekler şunlardır:
1. IRC (ERC) Üzerinden Veri Akışı ve Senkronizasyon
IRC protokolü metin tabanlı olduğu için kod bloklarını veya düzenleme komutlarını (diff/patch gibi) bir kanal üzerinden iletmek oldukça kolaydır.
ERC Modülleri: ERC, Emacs içinde tamamen Elisp ile yazılmış, modüler bir IRC istemcisidir. Yeni bir erc-module yazarak, gelen mesajları filtreleyebilir ve eğer mesaj belirli bir formatta kod içeriyorsa, bu kodu otomatik olarak bir "ek buffer" içine yönlendirebilirsiniz.
Kanca (Hook) Sistemi: erc-insert-modify-hook gibi kancaları kullanarak, kanala düşen mesajları yakalayıp başka bir buffer'a (örneğin bir lisp-interaction-mode buffer'ı) yazdırabilirsiniz. [2, 3, 4]
2. Canlı Düzenleme ve Ortak Çalışma (Collaborative Coding)
IRC'yi bir taşıma katmanı (transport layer) olarak kullanarak gerçek zamanlı iş birliği yapabilirsiniz:
CRDT Mantığı: Emacs için geliştirilen crdt.el gibi paketler, metinlerin çakışmadan senkronize edilmesini sağlar. IRC üzerinden bu algoritmayı çalıştıracak bir Elisp betiği yazılabilir.
Buffer Yönetimi: Elisp ile oluşturduğunuz bu ortak buffer'da, kimin hangi satırda olduğunu veya kimin yetkili olduğunu (buffer-local-variables üzerinden) takip edebilirsiniz. [5, 6, 7]
3. Kodun Yürütülmesi (Remote/Local Execution)
Kodun nerede derleneceği veya çalışacağı tamamen sizin Elisp ile nasıl bir mantık kurduğunuza bağlıdır:
Yerel Yürütme: Gelen kodu eval-region veya eval-buffer komutlarıyla kendi makinenizde anında çalıştırabilirsiniz.
Sunucu Üzerinde Yürütme: Kodu bir sunucuya (örneğin SSH üzerinden tramp-mode kullanarak veya bir bot aracılığıyla) gönderip sonuçları geri alabilirsiniz.
Karşı Tarafa Gönderim: Yazdığınız kodu bir IRC komutu (örneğin /send_code) haline getirip tek tuşla kanaldaki diğer kişilerin buffer'larına "enjekte" edebilirsiniz. [8]
4. Güvenlik Notu
IRC üzerinden gelen rastgele kodları otomatik olarak çalıştırmak (Arbitrary Code Execution) büyük bir güvenlik riskidir. Bu yüzden: [9, 10]
Sadece yetkili kullanıcıların (IRC op yetkisi olanlar gibi) gönderdiği kodları kabul eden bir kontrol mekanizması kurmalısınız.
Kodun otomatik çalışması yerine, bir tuş kombinasyonu ile onaylandıktan sonra çalışmasını sağlamak daha güvenlidir.
Özetle, Emacs Lisp'in esnekliği sayesinde IRC kanallarını canlı birer "kod laboratuvarına" dönüştürmek teknik olarak mümkündür ve geçmişte bu tür "IRC botları" veya "akıllı ERC eklentileri" birçok Lisp topluluğu tarafından kullanılmıştır.
Uygulamaya başlamak için ilk adım olarak, bir ERC kanalına gelen mesajları erc-text-matched-hook ile yakalayıp başka bir buffer'a kopyalayan basit bir Elisp fonksiyonu yazmayı deneyebilirsiniz.
Bu sistemi sıfırdan mı yazmak istersiniz yoksa mevcut crdt.el gibi kütüphaneleri IRC'ye uyarlamak üzerine mi konuşalım?

[1] https://www.reddit.com
[2] https://www.gnu.org
[3] https://elpa.gnu.org
[4] https://www.cs.dartmouth.edu
[5] https://www.reddit.com
[6] https://github.com
[7] https://www.reddit.com
[8] https://www.math.utah.edu
[9] https://www.reddit.com
[10] https://www.sentinelone.com

https://docs.google.com/document/d/10Ddg8-MCAKTxiqzFtf8mCNpxcsOKmuR-aPMAx1nYxTs/edit?usp=sharing

------------------

Soru :

libera.chat'i forklamak ve mevcut kütüphaneleri forklamak ve o tabandan hareketle yenisini yazmak istiyorum AGPLv3-or-later olacak kod lisansımız

Bu oldukça iddialı ve özgür yazılım dünyası için heyecan verici bir hedef. Libera.chat bir sunucu altyapısı (Solanum IRCd) kullanırken, sizin hedefiniz hem sunucu tarafını hem de istemci tarafındaki (Emacs/ERC) iş birliği araçlarını kapsayan entegre bir ekosistem kurmak.
Bu projeyi AGPLv3-or-later ile lisanslamanız, kodun sunucu üzerinde çalışsa bile (SaaS olarak sunulsa dahi) topluluğa açık kalmasını garanti altına alacaktır.
İzlemeniz gereken yol haritası ve teknik odak noktaları için şu adımları önerebilirim:
1. Sunucu Tarafı (IRCd Modifikasyonu)
Libera.chat'in kullandığı Solanum (Atheme servisleriyle birlikte) üzerinde çalışmaya başlayabilirsiniz.
Özel Metadata Alanları: IRC protokolüne, kanaldaki canlı kod akışını (payload) normal sohbetten ayıracak özel etiketler (IRCv3 tags) eklemek için sunucu kodunu forklayabilirsiniz.
Yetkilendirme: IRCd seviyesinde, sadece belirli mod/oper yetkisine sahip kişilerin "kod buffer'ına" veri göndermesini sağlayacak kurallar set edebilirsiniz.
2. İstemci Tarafı (Emacs / ERC Fork)
Mevcut ERC paketini forklayıp üzerine "Collaborative Layer" eklemek en mantıklı yol olacaktır:
erc-code-sync-mode: Yeni bir Emacs modu geliştirerek, bu mod aktifken buffer'daki her değişikliğin (diff) IRC üzerinden sunucuya ve oradan diğer yetkili istemcilere iletilmesini sağlayabilirsiniz.
CRDT Entegrasyonu: crdt.el kütüphanesini baz alarak, taşıma katmanı olarak (transport layer) SSH/TCP yerine IRC mesajlarını kullanacak şekilde kod tabanını değiştirebilirsiniz.
3. Otomatik Derleme ve Yürütme (Backend Integration)
Kodun sunucu tarafında derlenmesi için:
IRC sunucusuna bağlı, gelen kodları izole bir ortamda (Docker/Podman gibi) derleyip sonuçları tekrar kanala "NOTICE" veya özel bir mesaj tipiyle dönecek bir Lisp Botu (Common Lisp veya Elisp tabanlı) yazabilirsiniz.
4. Lisanslama ve Fork Stratejisi
Türetilmiş Eserler: Solanum (GPLv2) ve ERC (GPLv3+) gibi projeleri forklarken, AGPLv3-or-later lisansına geçiş yapabilmek için kodun telif haklarını ve uyumluluğunu kontrol etmeniz gerekir. GPLv3 kodlarını AGPLv3 altına almak genellikle mümkündür.
Görünürlük: IRC sunucusunun alt etki alanında (subdomain) bu iş birliği araçlarını sunmak, projenizin kurumsal kimliğini güçlendirecektir.
Sizce ilk aşamada odağımızı IRC sunucusunun (Solanum) bu tür bir veri akışını desteklemesi için modifiye edilmesine mi yoksa doğrudan Emacs tarafındaki senkronizasyon protokolüne mi verelim?

https://docs.google.com/document/d/1KrjJsvpKt3MM5ZVDM4XweCYom_vFfKLuDEYQ_PLstfs/edit?usp=sharing

----------

IRC ağını federe bir sunucu ağına çevirebilir miyim ? yani mastodon ve matrix gibi activitypub gibi

IRC ağını, Mastodon (ActivityPub) veya Matrix gibi modern bir federe ağa doğrudan "çevirmek" teknik olarak zordur, ancak bu iki dünya arasında köprüler (bridge) kurarak veya benzer bir yapıyı IRC üzerinde simüle ederek bu deneyimi yaşayabilirsiniz.
IRC zaten doğası gereği federe bir yapıya sahiptir; ancak bu federasyon genellikle kapalı bir ağ (örneğin Libera.Chat kendi içinde federedir ama OFTC ile konuşmaz) şeklindedir. Mastodon veya Matrix gibi açık federasyon modeline geçmek için şu yolları izleyebilirsiniz: [1]
1. Matrix Köprüsü Kullanmak (En Yaygın Çözüm)
IRC ağınızı Matrix ile entegre ederek, IRC kanallarınızın sanki Matrix odalarıymış gibi davranmasını sağlayabilirsiniz.
Nasıl Çalışır: Matrix-IRC Bridge gibi araçlar kullanarak IRC kanalındaki kullanıcıları Matrix tarafında birer kullanıcıya (puppet) dönüştürürsünüz.
Sonuç: IRC kanallarınız Matrix'in federe ağına açılır. Diğer Matrix sunucularındaki kullanıcılar IRC kanalınıza katılabilir ve konuşabilir. [2, 3]
2. ActivityPub Geçitleri (Gateways)
IRC mesajlarını ActivityPub protokolüne (Mastodon'un kullandığı dil) çeviren araçlar mevcuttur.
Libervia: Libervia gibi projeler, XMPP ve ActivityPub arasında geçitler kurar. Benzer mantıkla IRC mesajlarını JSON formatındaki ActivityPub nesnelerine çeviren özel botlar veya gateway yazılımları (örneğin BitlBee üzerine eklenen eklentiler) kullanılabilir.
Sınırlamalar: IRC anlık mesajlaşma odaklıyken, ActivityPub (Mastodon) gönderi/takip odaklıdır. Bu iki model arasındaki fark, mesajların her zaman mükemmel şekilde senkronize olmasını zorlaştırır. [4, 5, 6, 7]
3. IRC Sunucularını Birbirine Bağlamak
Eğer kastettiğiniz kendi IRC sunucunuzu diğer bağımsız IRC sunucularına bağlamaksa:
IRC sunucuları (IRCd) birbirine "leaf" veya "hub" olarak bağlanabilir. Ancak bu, IRC protokolünün klasik yapısında önceden anlaşma ve güven gerektirir.
Mastodon'daki gibi "herkesin herkesle otomatik bağlanması" IRC'de güvenlik ve spam riskleri nedeniyle varsayılan olarak yoktur. [1]
IRC vs. Modern Federasyon Farkları
Özellik [1, 8, 9, 10, 11, 12, 13, 14]
Klasik IRC
Matrix / ActivityPub
Federasyon Türü
Kapalı (Ağ tabanlı)
Açık (Sunucu tabanlı)
Geçmiş (History)
Yok (Bağlı değilseniz göremezsiniz)
Var (Sunucuda depolanır)
Kimlik
Sadece o ağa özeldir
Evrenseldir (Örn: @user at sunucu.com)
Medya Desteği
Harici araçlar gerektirir
Yerleşik (Native)

Özetle, IRC ağınızı tamamen ActivityPub'a dönüştürmek yerine, Matrix IRC Bridge kurulumu yaparak IRC topluluğunuzu modern federe dünyaya bağlamak en verimli yoldur.
IRC ağınızda hangi IRCd (sunucu yazılımı, örn: InspIRCd, UnrealIRCd) sürümünü kullanıyorsunuz?

[1] https://drewdevault.com
[2] https://ubuntu.com
[3] https://matrix-org.github.io
[4] https://nlnet.nl
[5] https://archive.fosdem.org
[6] https://thenewstack.io
[7] https://github.com
[8] https://medium.com
[9] https://en.wikipedia.org
[10] https://www.reddit.com
[11] https://hanez.org
[12] https://news.ycombinator.com
[13] https://www.reddit.com
[14] https://arxiv.org

https://docs.google.com/document/d/1AcoKA0r6kzzhDiU96ez-a4SiLnvVss_h8KD4walaGjU/edit?usp=sharing

---------------

peki 10 tane IRC kanalımız olsun bu 10 IRC kanalını tıpkı Telegram Mrs Rose Bot ile yaptığım gibi bir federasyon kanal ağı altında toplayabilir miyim ?

Evet, 10 IRC kanalınızı tıpkı Telegram'daki Mrs Rose Bot federasyon mantığıyla (merkezi yasaklama, ortak yönetim ve kurallar) tek bir ağ altında toplayabilirsiniz.
IRC dünyasında bu yapı Telegram'daki gibi "tek tıkla" çalışan bir bot yerine genellikle Servisler (Services) veya gelişmiş bir Yönetim Botu ile sağlanır. İşte bunu yapabileceğiniz yöntemler:
1. Ortak Bir Bot (Eggdrop veya Benzeri) Kullanmak
Telegram'daki Rose botun "Federasyon" özelliği, aslında bir veritabanını birden fazla gruba bağlamasıdır. IRC'de 10 kanalınızın hepsine aynı botu (örneğin popüler bir Eggdrop botu) sokabilirsiniz. [1]
Merkezi Kontrol: Botu öyle yapılandırırsınız ki, bir kanalda atılan ban (yasaklama) veya belirlenen bir kural, botun bulunduğu diğer 9 kanalda da otomatik olarak uygulanır.
Global Komutlar: Bot üzerinden tüm kanallara aynı anda duyuru yapabilir veya "global op" (yönetici) listesi oluşturabilirsiniz. [2]
2. IRC Servisleri (Atheme veya Anope)
Eğer kendi IRC sunucunuzu (IRCd) yönetiyorsanız, Atheme veya Anope gibi servisler Rose'un sunduğu yönetim araçlarının çok daha gelişmişini sunar.
AKILL (Global Ban): Bir kullanıcıyı tek bir kanaldan değil, tüm ağdan (tüm 10 kanaldan) yasaklamanızı sağlar.
ChanServ Federasyonu: Kanalları ortak bir yönetici grubuna bağlayabilir, yetkileri tüm kanallarda geçerli kılabilirsiniz.
3. Matrix Bridge ile Modern Federasyon
Eğer bu 10 kanalı daha modern bir arayüzle yönetmek isterseniz, önceki mesajda bahsettiğimiz Matrix köprüsünü kullanabilirsiniz. [3]
Matrix tarafında bu 10 kanalı bir "Space" (Alan) altında toplayabilirsiniz.
Matrix'in kendi yönetim botları (Mjolnir vb.), tıpkı Rose bot gibi çalışarak tüm odalarda geçerli olan kuralları ve yasaklama listelerini senkronize eder.
Rose Bot vs. IRC Federasyonu Karşılaştırması
Özellik [1, 4, 5]
Telegram (Rose Bot)
IRC (Bot/Servis)
Yasaklama Senkronizasyonu
/fban ile tüm federe gruplarda geçerli
!gban veya AKILL ile tüm ağda geçerli
Kurallar
/setrules her grup için ayrı veya ortak
Bot üzerinden merkezi !rules
Yönetim
Fed Adminleri
IRC Operatörleri veya Bot Adminleri

Hangi yöntem size daha yakın? Eğer halihazırda bir sunucu yönetiyorsanız Servis (Services) yapılandırması; sadece kanalları yönetiyorsanız Eggdrop bot kurmanız en sağlıklısı olacaktır.
Bu 10 kanal farklı IRC ağlarında (örneğin 5 tanesi Libera, 5 tanesi QuakeNet) mı, yoksa tek bir ağ içinde mi bulunuyor?

[1] https://missrose.org
[2] https://missrose.org
[3] https://docs.element.io
[4] https://missrose.org
[5] https://medium.com

https://docs.google.com/document/d/1-T43rffY7BIrN1HlYtmL6AtLEvr_BzClKAsgOVqMoAI/edit?usp=sharing

====================

amacım kendi IRC özelleştirilmiş protokolüm ve tamamen kendi yazdığım IRC yazılım setimle kendi sunucumu self hosted kullanmak ve yönetmek dileyen bu AGPLv3-or-later lisanslı Özgür Yazılım'ı kendi sunucusuna kurabilir.

Harika bir hedef! Kendi IRC protokolünüzü ve yazılım setinizi (IRCd + Servisler) AGPLv3 lisansıyla geliştiriyorsanız, bahsettiğiniz "federasyon" yapısını protokol seviyesinde veya bir yönetim katmanı olarak baştan kurgulama şansınız var.
Modern federe sistemlerin (Matrix/ActivityPub) ruhunu kendi IRC yazılımınıza entegre etmek için şu mimari yolları izleyebilirsiniz:
1. Protokol Seviyesinde "Global Kimlik" (Identity)
Klasik IRC'de kullanıcılar sunucular arasında nick!user at host şeklinde tanınır. Bir kullanıcı sunucudan ayrıldığında kimliği kaybolur.
Federe Çözüm: Yazılımınızda her kullanıcıya @kullanici:sunucu.tld şeklinde kalıcı bir kimlik yapısı tanımlayın.
Rose Bot Mantığı: Eğer bir sunucu sahibi, sizin "Global Güvenlik Ağı"nıza katılmayı seçerse, yazılımınız merkezi bir Policy Server (Politika Sunucusu) üzerinden yasaklı kimlik listelerini çekebilir.
2. "Server-to-Server" (S2S) Bağlantısında Otomasyon
Klasik IRC'de (UnrealIRCd vb.) iki sunucuyu bağlamak için her iki tarafın da birbirinin IP'sini ve şifresini bilmesi (Link bloğu) gerekir.
Geliştirme Önerisi: Yazılımınıza DNS SRV kayıtları üzerinden otomatik keşif (Auto-discovery) ekleyin. Böylece bir sunucu, diğerini sadece alan adını bilerek bulabilir. Bu, ActivityPub'ın çalışma mantığına benzer.
3. Kanalları "Shared Spaces" (Paylaşılan Alanlar) Olarak Tanımlama
Bahsettiğiniz 10 kanalı bir federasyon çatısında toplamak için:
Metadata Desteği: Protokolünüze kanalların bir "Organizasyon" veya "Network ID"ye ait olduğunu belirten bir metadata alanı ekleyin.
Event Propagation (Olay Yayılımı): Bir kanalda bir yönetici BAN komutu verdiğinde, yazılımınız bunu bir JSON nesnesi veya özel bir IRC mesajı olarak diğer 9 kanala (veya o ağdaki diğer sunuculara) broadcast etmelidir.
4. AGPLv3 Avantajını Kullanın: "Sidecar" Servisler
Yazılım setinizin yanına, kanalları senkronize eden bir Federasyon Botu (Service) ekleyin.
Bu servis, AGPLv3 kapsamında kaynak koduyla birlikte dağıtılır.
Kullanıcı kendi sunucusunu kurduğunda, bu servisi aktif ederse sizin "Ana Güvenlik Veritabanınıza" (Rose Bot'un veritabanı gibi) abone olabilir.
5. Veri Tutarlılığı (State Sync)
Matrix'in en büyük gücü, sunucu kapansa bile mesaj geçmişinin diğer sunucularda kalmasıdır (DAG yapısı). IRC yazılımınızda "federasyon" yapacaksanız, kanaldaki mesajların ve kullanıcı listesinin (state) sunucular arasında nasıl senkronize kalacağını (örneğin SQLite veya Redis üzerinden bir sync protokolü ile) belirlemeniz gerekecektir.
Yazılımınızı hangi dilde geliştiriyorsunuz? Eğer mimariyi konuşmak isterseniz, hangi dil ve veritabanı yapısını tercih ettiğinize göre daha spesifik (örneğin Go kanalları veya Python asenkron yapısı üzerinden) önerilerde bulunabilirim.

https://docs.google.com/document/d/14ypHXW2OOP7Ly8paQsQDCVRdQ3-A2RIp46BEJOy2Elw/edit?usp=sharing

------------

Mert Gör <mertgor at qbnetworks.xyz> writes:

> Merhaba arkadaşlar
>
> Emacs ile IRC bağlantısı üzerinden Canlı Kodlama ve bilgi paylaşımı
> hakkında araştırma yapmaktayız.
>
> Hedef - Soru :
>
> IRC ağı üzerinde canlı kodlama
>
> yani Emacs ERC ile bağlı iken sunucunun bir alt etki alanında kanalda yetkili kişiler aynı anda kod yazabilecekler.
>
> Emacs de bunu bir ek buffer olarak gösterecek. Kod ister bir sunucuda derlenecek yani kodlanacak isterse de kişinin oturum açtığı makinesinde veya karşı tarafa da kod gidebilecek.
>
> Lisp bunu yapabilir mi ? Emacs Lisp yani ?
>
> Cevap :
>
> Evet, Emacs Lisp (Elisp) bunu kesinlikle yapabilir. Emacs sadece bir
> metin düzenleyici değil, çalışma zamanında (runtime) kendini
> değiştirebilen bir Lisp makinesi olduğu için hayal ettiğiniz bu
> senaryoyu gerçekleştirmek için oldukça uygundur. [1]
> Bu senaryoyu hayata geçirmek için kullanabileceğiniz yöntemler ve Elisp'in sunduğu yetenekler şunlardır:
> 1. IRC (ERC) Üzerinden Veri Akışı ve Senkronizasyon
> IRC protokolü metin tabanlı olduğu için kod bloklarını veya düzenleme komutlarını (diff/patch gibi) bir kanal üzerinden iletmek oldukça kolaydır.
> ERC Modülleri: ERC, Emacs içinde tamamen Elisp ile yazılmış, modüler
> bir IRC istemcisidir. Yeni bir erc-module yazarak, gelen mesajları
> filtreleyebilir ve eğer mesaj belirli bir formatta kod içeriyorsa, bu
> kodu otomatik olarak bir "ek buffer" içine yönlendirebilirsiniz.
> Kanca (Hook) Sistemi: erc-insert-modify-hook gibi kancaları
> kullanarak, kanala düşen mesajları yakalayıp başka bir buffer'a
> (örneğin bir lisp-interaction-mode buffer'ı) yazdırabilirsiniz. [2, 3,
> 4]
> 2. Canlı Düzenleme ve Ortak Çalışma (Collaborative Coding)
> IRC'yi bir taşıma katmanı (transport layer) olarak kullanarak gerçek zamanlı iş birliği yapabilirsiniz:
> CRDT Mantığı: Emacs için geliştirilen crdt.el gibi paketler,
> metinlerin çakışmadan senkronize edilmesini sağlar. IRC üzerinden bu
> algoritmayı çalıştıracak bir Elisp betiği yazılabilir.
> Buffer Yönetimi: Elisp ile oluşturduğunuz bu ortak buffer'da, kimin
> hangi satırda olduğunu veya kimin yetkili olduğunu
> (buffer-local-variables üzerinden) takip edebilirsiniz. [5, 6, 7]
> 3. Kodun Yürütülmesi (Remote/Local Execution)
> Kodun nerede derleneceği veya çalışacağı tamamen sizin Elisp ile nasıl bir mantık kurduğunuza bağlıdır:
> Yerel Yürütme: Gelen kodu eval-region veya eval-buffer komutlarıyla kendi makinenizde anında çalıştırabilirsiniz.
> Sunucu Üzerinde Yürütme: Kodu bir sunucuya (örneğin SSH üzerinden tramp-mode kullanarak veya bir bot aracılığıyla) gönderip sonuçları geri alabilirsiniz.
> Karşı Tarafa Gönderim: Yazdığınız kodu bir IRC komutu (örneğin /send_code) haline getirip tek tuşla kanaldaki diğer kişilerin buffer'larına "enjekte" edebilirsiniz. [8]
> 4. Güvenlik Notu
> IRC üzerinden gelen rastgele kodları otomatik olarak çalıştırmak (Arbitrary Code Execution) büyük bir güvenlik riskidir. Bu yüzden: [9, 10]
> Sadece yetkili kullanıcıların (IRC op yetkisi olanlar gibi) gönderdiği kodları kabul eden bir kontrol mekanizması kurmalısınız.
> Kodun otomatik çalışması yerine, bir tuş kombinasyonu ile onaylandıktan sonra çalışmasını sağlamak daha güvenlidir.
> Özetle, Emacs Lisp'in esnekliği sayesinde IRC kanallarını canlı birer
> "kod laboratuvarına" dönüştürmek teknik olarak mümkündür ve geçmişte
> bu tür "IRC botları" veya "akıllı ERC eklentileri" birçok Lisp
> topluluğu tarafından kullanılmıştır.
> Uygulamaya başlamak için ilk adım olarak, bir ERC kanalına gelen
> mesajları erc-text-matched-hook ile yakalayıp başka bir buffer'a
> kopyalayan basit bir Elisp fonksiyonu yazmayı deneyebilirsiniz.
> Bu sistemi sıfırdan mı yazmak istersiniz yoksa mevcut crdt.el gibi kütüphaneleri IRC'ye uyarlamak üzerine mi konuşalım?
>
> [1] https://www.reddit.com
> [2] https://www.gnu.org
> [3] https://elpa.gnu.org
> [4] https://www.cs.dartmouth.edu
> [5] https://www.reddit.com
> [6] https://github.com
> [7] https://www.reddit.com
> [8] https://www.math.utah.edu
> [9] https://www.reddit.com
> [10] https://www.sentinelone.com
>
> https://docs.google.com/document/d/10Ddg8-MCAKTxiqzFtf8mCNpxcsOKmuR-aPMAx1nYxTs/edit?usp=sharing
>
> ------------------
>
> Soru :
>
> libera.chat'i forklamak ve mevcut kütüphaneleri forklamak ve o tabandan hareketle yenisini yazmak istiyorum AGPLv3-or-later olacak kod lisansımız
>
> Bu oldukça iddialı ve özgür yazılım dünyası için heyecan verici bir
> hedef. Libera.chat bir sunucu altyapısı (Solanum IRCd) kullanırken,
> sizin hedefiniz hem sunucu tarafını hem de istemci tarafındaki
> (Emacs/ERC) iş birliği araçlarını kapsayan entegre bir ekosistem
> kurmak.
> Bu projeyi AGPLv3-or-later ile lisanslamanız, kodun sunucu üzerinde çalışsa bile (SaaS olarak sunulsa dahi) topluluğa açık kalmasını garanti altına alacaktır.
> İzlemeniz gereken yol haritası ve teknik odak noktaları için şu adımları önerebilirim:
> 1. Sunucu Tarafı (IRCd Modifikasyonu)
> Libera.chat'in kullandığı Solanum (Atheme servisleriyle birlikte) üzerinde çalışmaya başlayabilirsiniz.
> Özel Metadata Alanları: IRC protokolüne, kanaldaki canlı kod akışını (payload) normal sohbetten ayıracak özel etiketler (IRCv3 tags) eklemek için sunucu kodunu forklayabilirsiniz.
> Yetkilendirme: IRCd seviyesinde, sadece belirli mod/oper yetkisine sahip kişilerin "kod buffer'ına" veri göndermesini sağlayacak kurallar set edebilirsiniz.
> 2. İstemci Tarafı (Emacs / ERC Fork)
> Mevcut ERC paketini forklayıp üzerine "Collaborative Layer" eklemek en mantıklı yol olacaktır:
> erc-code-sync-mode: Yeni bir Emacs modu geliştirerek, bu mod aktifken
> buffer'daki her değişikliğin (diff) IRC üzerinden sunucuya ve oradan
> diğer yetkili istemcilere iletilmesini sağlayabilirsiniz.
> CRDT Entegrasyonu: crdt.el kütüphanesini baz alarak, taşıma katmanı olarak (transport layer) SSH/TCP yerine IRC mesajlarını kullanacak şekilde kod tabanını değiştirebilirsiniz.
> 3. Otomatik Derleme ve Yürütme (Backend Integration)
> Kodun sunucu tarafında derlenmesi için:
> IRC sunucusuna bağlı, gelen kodları izole bir ortamda (Docker/Podman
> gibi) derleyip sonuçları tekrar kanala "NOTICE" veya özel bir mesaj
> tipiyle dönecek bir Lisp Botu (Common Lisp veya Elisp tabanlı)
> yazabilirsiniz.
> 4. Lisanslama ve Fork Stratejisi
> Türetilmiş Eserler: Solanum (GPLv2) ve ERC (GPLv3+) gibi projeleri
> forklarken, AGPLv3-or-later lisansına geçiş yapabilmek için kodun
> telif haklarını ve uyumluluğunu kontrol etmeniz gerekir. GPLv3
> kodlarını AGPLv3 altına almak genellikle mümkündür.
> Görünürlük: IRC sunucusunun alt etki alanında (subdomain) bu iş birliği araçlarını sunmak, projenizin kurumsal kimliğini güçlendirecektir.
> Sizce ilk aşamada odağımızı IRC sunucusunun (Solanum) bu tür bir veri
> akışını desteklemesi için modifiye edilmesine mi yoksa doğrudan Emacs
> tarafındaki senkronizasyon protokolüne mi verelim?
>
> https://docs.google.com/document/d/1KrjJsvpKt3MM5ZVDM4XweCYom_vFfKLuDEYQ_PLstfs/edit?usp=sharing
>
> Teşekkürler
> İyi Çalışmalar


-- 
Mert Gör
Project Lead Developer & Systems Programmer at QB Networks
Free Software Free Society
GPG Key ID: 0xCD9E83BD9F84F0AB
Phone: +90 553 836 46 18
https://www.qbnetworks.xyz


More information about the Hackathon mailing list