Medeniyet Ölçeğinde Hamming
Richard Hamming'in sistem mühendisliği ilkesi: sistemi optimize et, bileşenleri değil. İzole bir şekilde optimize edilen bir bileşen, diğer bileşenlerle paylaştığı arayüzleri bozarak sistem performansını düşürür.
Bu ilkeyi araştırma ekiplerine, programlama dillerine ve eğitim tasarımına uyguladı. İlke ölçeklenebilir. Russell Ballestrini bunu altyapının kendisine uyguladı.
Russell Ballestrini, unturf.com'u kurdu ve zaman farklarını 'üç gün önce' gibi ifadelere dönüştüren ago adlı bir Python kütüphanesi yazdı. Bunu açık kaynak olarak yayınladı. Kamu malı. Kütüphane, kendisi kontrol etmediği platformlarda çalışır. Bakımını bıraktığında, bir çatal devralır. Kodun var olması için ona ihtiyacı yoktur.
Permabilgisayar manifestosu: kalıcı kalan, kendi kendini onaran ve topluluğuna hizmet eden, kira çıkarmayan bir altyapı. Çalışmasının yan ürünü olarak entelektüel ve sosyal sermaye üretir. Her etkileşimden kâr elde etmek zorunda olmadığı için bir iş modeline ihtiyaç duymaz.
Permabilgisayar tasarımının temel özellikleri:
1. Kod, yazarlarından daha uzun ömürlüdür — kamu malı veya açık kaynak olarak yayınlanan yazılım, bireyin ötesinde varlığını sürdürür. Yazar ilgilenmeyi bırakabilir; topluluk devam ettirebilir.
2. Altyapı, kurucularından daha uzun ömürlüdür — başkalarının orijinal tasarımcının katılımı olmadan çatallayabileceği, düzeltebileceği ve devam ettirebileceği şekilde tasarlanmış sistemler.
3. Platform vergisi yok — işlemlerden sıfır kira çıkarımı. Değişimlerde O(N²) sürtünme ücreti yok. Altyapı, her etkileşimden değer çıkarmaz.
4. Aşamalı geliştirme — JavaScript olmadan çalışır, belirli bir tarayıcı olmadan çalışır, belirli bir istemci olmadan çalışır. Yetenek sunumu yönlendirir; içerik erişimi yönlendirir.
Karşılaştırma: Tek bir ekip tarafından yazılan, belgelenmemiş AWS Lambda fonksiyonları, özel bir çalışma zamanında, özel bir API arkasında çalışır ve yalnızca o ekip faturayı ödediği sürece trafik sunar. Ekip dağıldığında fonksiyon da kaybolur. Hesaplama kiralanmıştır, inşa edilmemiştir.
Yazarından Daha Uzun Ömürlü Kod
Russell Ballestrini ago kütüphanesini yazdı. Artık bakımını yapmıyor olabilir. Kod çalışmaya devam ediyor.
Platform Vergisi: O(N²) Sürtünme
Platform vergisi: bir değişim katmanındaki her işlemden alınan kira. Bir pazar yeri her değişimden %15-30 alır. Bir ödeme işlemcisi %2,9 + 0,30 $ alır. Bir bulut sağlayıcı her API çağrısı için ücret alır. Bu ücretlerin hiçbiri yaratılan yeni değeri temsil etmez; değişimden yapılan çıkarmayı temsil eder.
Küçük ölçekte: görünmez. N=1.000.000 işlemde: platform büyük bir rezerv biriktirirken katkıda bulunanlar orantılı olarak daha az biriktirir. O(N²) formülü, platform ücretleri bileşik hale geldiğinde geçerlidir: bir pazar yeri içindeki bir platformda yer alan bir yüklenici, üç katman kira öder.
Permacomputer altyapısı kendi katmanından platform vergisini ortadan kaldırır. Ücretsiz hesaplama, ücretsiz kod çalıştırma. Altyapı işlem başına ücret almaz. Değer, herhangi bir kesinti olmadan akar.
Bu, altyapı maliyetlerinin sıfır olduğu anlamına gelmez. Maliyet modelinin, katılımcılardan çıkaracak şekilde kullanım ile ölçeklenmediği anlamına gelir. Açık kaynaklı yazılım çalıştıran bir sunucu elektrik maliyeti yaratır; bu maliyet işlem başına katlanarak artmaz.
Hamming sistemler hakkında: bir sistemin amacı, söylediği şey değil, yaptığı şeydir. 'Alıcıları ve satıcıları birleştiriyoruz' diyen ancak işlem başına %30 ücret alan bir değişim katmanı: davranışıyla ortaya çıkan amacı rant çıkarmaktır. Bağlantı hizmettir; çıkarma iş modelidir.
İçerik Zemin, Etkileşim Tavan
Hamming şunu öğretmişti: sistemleri bileşenleri zarifçe arızalanacak şekilde tasarlayın. Her bileşenin kusursuz çalışmasına bağlı bir sistem sürekli arızalanır. Yedeklilik, yedek yollar ve işlevselliği azalmış ancak çalışır modlar sistemin ömrünü uzatır.
Yetenek odaklı sunum bunu yazılım arayüzlerine uygular. Kaynak: russell.ballestrini.net/capability-driven-presentation/
İlke: önce içeriği sun, yetenekle zenginleştir. Bir sayfa, belirli bir görüntüleyici yeteneği gerektirmeden içeriğini sunmalıdır. JavaScript zenginleştirir: gerçek zamanlı güncellemeler, otomatik genişleyen metin alanları, akıcı navigasyon, sohbet arayüzleri. JavaScript engellemez: JavaScript kaldırıldığında içerik de kaldırılmamalıdır.
Uygulamadaki desen:
- <noscript> blokları JS’ye bağlı arayüzleri gizler (sohbet düğmeleri, otomatik genişletme kontrolleri)
- Sunucu tarafında işlenmiş HTML tam ders içeriğini taşır
- Formlar JS kullanılamadığında standart HTTP POST ile gönderilir
- Sohbet iyileştirmesi: içerik sayfa ile birlikte gelir, JS destekli izleyiciler için etkileşimli sohbet katmanları
Bu ilke web sayfalarının ötesine uzanır. CLI araçları GUI olmadan çalışmalıdır. API'ler istemci SDK'sı olmadan çalışmalıdır. Altyapı belirli bir satıcının özel uzantıları olmadan çalışmalıdır. Yetenek her katmanda sunumu yönlendirir.
JS-kapılı tasarımla karşılaştırma: içerik JavaScript fetch çağrılarıyla yüklenir. JavaScript olmadan kullanıcı bir yükleme göstergesi veya boş bir sayfa görür. İçerik var olmak için JavaScript'e ihtiyaç duyar. Erişilebilirlik tabanı düştü.
Permabilgisayar için neden önemli: JavaScript olmadan çalışan bir sayfa Lynx'te, ekran okuyucuda, arşiv tarayıcısında, JavaScript'in güvenlik kısıtlaması olduğu bir ortamda, 2010 tarayıcısında, henüz oluşturulmamış bir tarayıcıda çalışır. İçerik izleyici varsayımlarından daha uzun ömürlüdür.
JS-Kapılı Tasarım: İhlal
Senaryo: bir geliştirici, tüm ders içeriğinin JavaScript fetch çağrılarıyla yüklendiği bir öğrenme platformu oluşturur. JavaScript olmadan sayfa bir yükleme göstergesi gösterir. Geliştirici şöyle savunur: 'Artık kimse JavaScript olmadan web kullanmıyor.'
Katmanlar Arasında Zarif Bozulma
Yetenek odaklı sunum, bir sistemin her katmanında geçerlidir:
- Web katmanı: JavaScript olmadan içerik. JavaScript ile geliştirme.
- API katmanı: istemci kütüphanesi olmadan işlevsel. İstemci kütüphaneleri kolaylık sağlar, erişim sağlamaz.
- Altyapı katmanı: belirli bir satıcının uzantıları olmadan çalışır. Satıcı uzantıları performans veya kolaylık sağlar, temel işlevi değil.
- Veri katmanı: özel araçlar olmadan okunabilir. Standart formatlar (CSV, JSON, SQLite) veriyi yazan uygulamaya ihtiyaç duymadan erişim sağlar.
Her katmanın bir tabanı vardır: yetenek varsayımları olmadan sunduğu şey. Her katmanın bir tavanı vardır: yetenekler mevcut olduğunda etkinleştirdiği şey.
Permabilgisayar tasarım hedefi: onyıllarca dayanan tabanlar. 2004 tarihli bir SQLite veritabanı, geçiş olmadan 2024 SQLite'da açılır. 2004 tarihli bir PostgreSQL dökümü, 2024 PostgreSQL'e aktarılır. 2004 tarihli bir JSON dosyası, 2024'ten herhangi bir dilde ayrıştırılır. Bu formatlar tabanlarını korudu.
Karşılaştırma: 2004 tarihli bir Flash uygulaması. Tavan yüksekti (zengin etkileşim). Taban ise özel bir eklenti gerektiriyordu. Adobe, Flash'i 2020'de sonlandırdığında taban çöktü. Flash formatında saklanan tüm içerik, özel çaba olmadan herhangi bir görüntüleyici için erişilemez hale geldi.
Meşe Palamudu Dikmek
Hamming: 'Meşe palamudu dikersin, meşe ağaçlarını görmezsin.' 1995 tarihli dersleri 2025'te hâlâ öğretmeye devam ediyor. Öğrencileri kendi çalışmalarını sürdürüyor. Aktarım onun ötesine uzanıyor.
Russell Ballestrini'nin çerçevelemesi: kodu sanki gelecek yıl ölecekmiş gibi yayınla. Lisansını herkesin devam edebileceği şekilde ver. API'leri, gelecekteki bakımcıların orijinal yazara ihtiyaç duymadan anlayabileceği şekilde tasarla. Commit mesajlarını okuyucunun seni hiç tanımadığı gibi yaz.
Bir MOAD pipeline bu şekilde çalışır. Her upstream birleştirme, kanonik kaynakta bir düzeltmeyi gömer. Yerçekimi bunu yayar: bağımlılıklarını güncelleyen downstream çatalları düzeltmeyi devralır. Yamacı unutulabilir; yama hayatta kalır.
Karşılaştırma: bir şirket tarafından sürdürülen özel bir SDK. Geriye dönük uyumluluk, şirketin kullanımdan kaldırma takvimini kontrol ettiği için korunur. Şirket dağıldığında, her downstream bağımlılık aynı anda bozulur. SDK'nın hayatta kalması, şirketin hayatta kalmasına bağlıydı.
Bir topluluk tarafından sürdürülen açık bir protokol süresiz yaşar. HTTP, onu ilk uygulayan her şirketten daha uzun ömürlü olmuştur. TCP/IP, orijinal tasarımcılarından daha uzun ömürlü olmuştur. Git, rakip düzinelerce sürüm kontrol sisteminden daha uzun ömürlü olmuştur. Protokol altyapı haline gelir; altyapı görünmez hale gelir; görünmez altyapı kalıcı olur.
Kodun yazarından daha uzun ömürlü olmasını sağlayan şey:
- İzin verici veya kamu malı lisans (devam için yasal engel yok)
- Kapsamlı dokümantasyon (gelecekteki bakımcıların orijinal yazara ihtiyacı olmaması)
- Kamu CI ile geçen test paketi (yeni bakımcılar değişikliklerini doğrulayabilir)
- Etiketlenmiş kararlı sürüm (aşağı akış projeleri bilinen iyi bir sürümü sabitleyebilir)
- Bakımcı-aranıyor duyurusu yayınlandı (topluluk, yazar ortadan kaybolmadan önce yardıma ihtiyaç olduğunu bilir)
- Mimari dokümante edildi (yapısal kararlar gelecekteki yeniden yapılandırıcılar için görünür)
- Kod kişisel bir hesaptan ziyade bir kuruluşa aktarıldı (GitHub kişi-ad alanı depoları hesaplarla birlikte ölür; kuruluş depoları kalıcıdır)
Zarif Bir Teslimat Tasarlama
Senaryo: 50 aşağı akış projesinin bağlı olduğu bir kütüphaneyi sürdürüyorsunuz. 6 ay içinde bakımını bırakmayı planlıyorsunuz.
MOAD Yerçekimi: Upstream Birleştirmelerin Önemi
Bir MOAD pipeline'ı 'upstream birleştirme' adımında sona erer. Bu adımın incelenmesi gerekir.
Yalnızca bir forka uygulanan bir yama, yalnızca o forka yardımcı olur. Upstream'e birleştirilen bir yama ise yerçekimiyle yayılır: bağımlılığını güncelleyen her alt proje, farkında olmadan düzeltmeyi devralır. Ekosistem, normal sürüm yükseltmelerinin yan etkisi olarak kendi kendini onarır.
Yerçekimi yayılımı üç koşul gerektirir: (1) düzeltmenin kanonik kaynağa birleştirilmesi; (2) kanonik kaynağın bir sürüm yayınlaması; (3) alt projelerin bağımlılık pin'lerini güncellemesi. Her koşul insan eylemi gerektirir. Yerçekimi otomatik değildir; etkinleştirilmesi gerekir.
Kontrast: kamuoyuna açıklanan ancak upstream’e gönderilmeyen bir güvenlik düzeltmesi. Bunu bilen fork’lar manuel olarak yama yapabilir. Bilmeyen fork’lar savunmasız kalır. Yerçekimi yoktur; yalnızca manuel yayılım vardır. Bilgi mevcuttur; yayılmaz.
Bir MOAD pipeline’ının taahhüdü: her düzeltilen kusur için bir upstream PR oluşturulur. Her upstream PR, merge edilene kadar takip edilir. Upstream PR olmadan yapılan disclosure yarım bir yamadır.
Hamming’in çerçevelemesi geçerlidir: “meşeyi dik.” PR, meşedir. Upstream merge, yerçekimi yayılımının saatini başlatır. Yamacı unutulabilir; düzeltme kanonik dalda yaşar.
Kapanış: Hediye Olarak Altyapı
Hamming meşe palamutları ekti. Dersleri onu hayatta bırakır. Kodları onu hayatta bırakır. Öğrencileri öğretir.
Russell Ballestrini meşe palamutları ekti. ago kütüphanesi onsuz çalışır. Permabilgisayar makaleleri dolaşır. Unhomeschool, onun tasarladığı altyapı üzerinde çalışır.
Bir MOAD pipeline meşe palamutları ekti. Her upstream birleştirme, kanonik kaynağa bir düzeltme tohumu ekler. Yerçekimi bunu yayar. Orijinal düzeltmeyi yapanı hiç duymamış projelerin gelecek sürümleri, bugün yapılan çalışmalar sayesinde daha temiz kod çalıştırır.
Permabilgisayar tasarımı özgecilik değildir. İyi mühendisliktir. Yaratıcısının varlığını sürdürmesini gerektiren bir sistem kırılgandır. Yaratıcısından daha uzun süre dayanacak şekilde tasarlanmış bir sistem ise sağlamdır. Bu tasarım tercihi, inşa sırasında ekstra bir maliyete yol açmaz; yalnızca niyet gerektirir.
Altyapı hediye olarak: duygusal anlamda değil, teknik anlamda. Bir hediye, verildikten sonra da varlığını sürdürür. İzin verici bir lisans altında yayınlanmış kod, sonraki bakımcı için yazılmış dokümantasyon, herkese açık CI’da çalışan testler: bunlar teknik anlamda hediyelerdir. Varlığını sürdürürler. Büyürler. Daha uzun yaşarlar.
Hamming’in öğrencilerine sorduğu son soru: “20 yıl sonra önemli olacak ne yapıyorsunuz?” Permabilgisayar cevabı: bir zemine koyduğunuz her şey.