[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:05:36 +03 2026


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