1 puan yazan GN⁺ 1 시간 전 | 1 yorum | WhatsApp'ta paylaş
  • Principia Softwarica, Plan 9 from Bell Labs çekirdeği, kabuğu, pencere sistemi, derleyicisi, bağlayıcısı, editörü, tarayıcısı ve hata ayıklayıcısının kaynak kodunu kitaplaştırarak bilgisayarın iç işleyişini anlamaya yardımcı olan bir seri
  • Her kitap, kaynak kod ile belgeleri birlikte içeren bir literate program içeriğinden üretilir ve gerçek kod ile kitap aynı belgeden otomatik olarak oluşturulur
  • Tüm seri 205.081 LOC, 82.014 LOE, 6.312 sayfa ölçeğindedir; hedef, her bir kod satırına bir açıklama satırı karşılık gelecek şekilde LOE/LOC 1.0 düzeyine ulaşmaktır
  • Plan 9, tüm sistemin yalnızca 183K LOC olması nedeniyle küçüktür; tutarlı C stili ile “her şey bir dosyadır”, süreç başına namespace ve ağ şeffaflığı gibi fikirleri sistemin geneline eşit biçimde uygulayarak tüm işletim sistemini açıklanabilir bir yapıya dönüştürür
  • Proje kaynakları github.com/aryx/principia-softwarica adresinde açık olarak yayımlanmıştır; Getting Started ise Docker veya kaynaktan Plan 9 derleyip çalıştırma yöntemini sunar

Projeye genel bakış

  • Principia Softwarica, programcıların kullandığı temel sistem programlarının tüm kaynak kodunu ayrıntılı biçimde açımlayarak bilgisayarın iç işleyişini anlamaya yardımcı olan bir kitap serisidir
  • Tüm programlar, Unix’in ardılı olarak tasarlanmış bir işletim sistemi olan Plan 9 from Bell Labs’tan alınmıştır; temel varsayım, kodun küçük ve zarif olmasıdır
  • Ele alınan programlar arasında çekirdek, kabuk, pencere sistemi, derleyici, bağlayıcı, editör, web tarayıcısı ve hata ayıklayıcı yer alır; her program ayrı bir kitap olarak düzenlenmiştir
  • Kitaplar, uygulamayı açıklayan bir belge olduğu kadar uygulamanın kendisidir de
    • Her program, kaynak kod ile belgeleri birlikte içeren bir literate program belgesinden çıkar; hem gerçek kod hem de kitap bu belgeden otomatik olarak üretilir
    • Literate programming hakkında ayrı bir açıklama için more about literate programming sayfasına bakılabilir
  • Proje kaynakları github.com/aryx/principia-softwarica adresinde açık olarak yayımlanmıştır

Neden gerekli

  • Eğitimdeki boşluk

    • Terminal penceresinde ls yazıldığında ne olduğunun yanıtı; kabuk, C kütüphanesi, çekirdek, grafik yığını ve pencere sisteminin tamamından geçer
    • Keith Adams, Facebook’ta çalışmış ve daha sonra Slack Chief Architect olmuştu; bu soruyu mülakat sorusu olarak kullandı. Tüm izlek The Journey of ls içinde yer alıyor
    • Günümüzde “full-stack” genellikle React, Node ve bulut anlamına geliyor; ancak gerçek alt yığında derleyici, bağlayıcı, çekirdek ve sistem çağrıları bulunuyor
    • Sistem programlarının kavramlarını anlatan çok iyi ders kitapları var, ancak gerçek kaynak kodu gösteren materyal neredeyse yok; Principia Softwarica bu boşluğu doldurmayı amaçlıyor
  • Yapay zeka çağındaki önemi

    • Yapay zeka kodlama araçları, Principia Softwarica’nın açıkladığı grep, sed, diff, awk, gcc, ld gibi programları günde yüzlerce kez çalıştırıyor
    • Kodlama işinde kod yazmak %20, anlamak %80 ise, yapay zeka %20’lik kısmı üstlendikçe kodun gerçekte ne yaptığını, donanıma kadar inerek anlamayı kapsayan o %80 daha da önemli hale geliyor
    • Makineler derin öğrenmeden geçtiyse, insanların da derinlemesine öğrenmesi gerektiği düşüncesi bu yaklaşımın temelinde yer alır

Kitaplar ve kapsam

Plan 9'un seçilme nedenleri

  • Plan 9, tüm işletim sistemini gerçekçi biçimde anlayabilecek kadar küçüktür, tutarlı bir C stiliyle yazılmıştır ve birkaç güçlü fikri yeknesak biçimde uygular
    • Her şey bir dosyadır
    • Süreç başına namespace kullanır
    • Ağ şeffaflığı sağlar
  • macOS ya da Windows kadar gösterişli değildir, ancak özünde aynı temel hizmetleri sunar
    • Süreçleri ve belleği yöneten bir kernel
    • Pencere sistemi
    • Shell
    • Derleyici
    • Ağ iletişimi
    • Grafik uygulamaları
  • Tüm Plan 9 sistemi; kernel, derleyici, shell, pencere sistemi ve daha fazlası dahil olmak üzere 183K LOC'tur ve vim 350K LOC'den neredeyse 2 kat daha küçüktür
  • 400 sayfalık bir kitabın yaklaşık 12K LOC ele aldığını varsayarsak, Principia Softwarica tüm Plan 9'u yaklaşık 15 kitapta ele alabilir
    • gdb gibi tek bir program için 10 kat daha fazla kitap gerekir
    • gcc için 100 kat daha fazla kitap gerekir
  • Wayland, X11'in modern bir alternatifidir ve Clang, GCC'nin modern bir alternatifidir, ancak yalnızca “temiz bir yeniden yazım” programları küçültmez
  • En baştan sadelik hedefiyle tasarlanmış Plan 9 yaklaşımı, her satırın kitapta açıklanabilmesini mümkün kılar

Öğrenilenleri diğer sistemlere uygulama biçimi

  • Plan 9'u doğrudan kullanmanız gerekmez; küçük ve zarif bir işletim sistemini anlamak, Linux, macOS ve Windows hakkında sezgi kazanmanızı sağlayabilir
  • Kernel, derleyici, linker, shell, editör, debugger, GUI toolkit ve ağ yığını aynı temel sorunları çözer; kod 5 bin satır da olsa 500 bin satır da olsa sorunun özü aynıdır
  • Plan 9'un C derleyicisini okumak, GCC'yi incelerken gerekli olacak kavram dağarcığını kazandırır
  • Plan 9'un linker'ını tek seferde anlamak, LLD'nin relocation işlemesini bunaltıcı olmaktan çıkarıp okunabilir bir hedefe dönüştürür
  • acid'in sembol tablosunu okuyup stack üzerinde nasıl yürüdüğünü görmek, GDB'de neye bakmanız gerektiğini öğretir
  • Küçük bir uygulama, büyük codebase'lerde özsel karmaşıklık ile tesadüfi karmaşıklığı ayırt etmek için bir çalışma modeli sunar
  • Plan 9'un fikirleri zaten yaygın biçimde kullanılmaktadır
    • UTF-8, Thompson ve Pike tarafından Plan 9 için oluşturuldu
    • /proc, Plan 9'dan geldi
    • Docker ve container'ların temelini oluşturan Linux namespace'leri Plan 9'dan geldi
    • Go, Pike ve Thompson tarafından geliştirildi; goroutine'ler ise Plan 9'un libthread'inden ilham aldı
    • 9P protokolü WSL2'de kullanılıyor
  • Principia Softwarica'nın açıkladığı grep, sed, awk, diff, cc, ld; programcıların her gün kullandığı araçlardır ve aynı kavramlar Plan 9'da çok daha açık biçimde ifade edilir
  • plan9port, Plan 9 kullanıcı alanındaki grep, sed, awk araçlarını Linux ve macOS'a taşır
  • goken9cc, Linux, macOS ve Windows üzerinde Plan 9 C toolchain'ini kullanarak bu platformlar için yerel binary'ler üretmeyi mümkün kılar

Kaynak kodu ve çalıştırma

OCaml portu ve yardımcı araçlar

  • Birkaç kitap yazıldıktan sonra bazı programlar, statik tipli fonksiyonel bir dil olan OCaml'a taşındı
  • İlk motivasyon, C kodunu daha iyi anlamaktı
    • Bir programı başka bir dile taşımak, hangi kısımların özsel hangilerinin ikincil olduğunu ortaya çıkarır
    • Porttaki hatalar, orijinalde gizlenmiş ince ayrıntıları açığa çıkarır
  • OCaml portu, XIX adlı ayrı bir projeye dönüştü; OCaml sürümü araçlarını ele alan kendi web sitesine ve literate programming kitap serisine sahip
  • syncweb — Tüm kitapları üretmekte kullanılan literate programming aracı; Noweb'in bir devamı
  • goken9cc — Linux, macOS ve Windows üzerinde Plan 9 derlemek için bir C çapraz derleyicisi; Kencc'in bir devamı

İlgili çalışmalar ve farklar

  • Project Oberon, tüm kaynak koduyla birlikte derleyici ve pencere sistemini de içeren tam bir işletim sistemi sunması bakımından ruhen Principia Softwarica'ya en yakın çalışmadır
    • Oberon, yalnızca Oberon programlarını çalıştırabildiği için Smalltalk gibi güzel ama yalıtılmış, kendi içinde tamamlanmış bir dünyadır
    • Plan 9 ve Unix, hangi dilde yazılmış olursa olsun programları derleyip çalıştırabilen genel amaçlı sistemlerdir
    • Oberon'da ağ iletişimi yoktur ve özel donanım üzerinde çalışır
    • Principia Softwarica, gerçek bir işletim sistemi üzerinde derleyici, linker, shell, debugger, grafik ve ağ iletişimini kapsayan daha geniş bir alanı ele alır
  • The Elements of Computing Systems, Nand2Tetris olarak da bilinir ve bir bilgisayarı NAND kapısından Tetris'e kadar inşa eder
    • Eğitim açısından mükemmeldir, ancak donanım ve yazılım; ders için yapılmış oyuncak bir CPU, oyuncak bir işletim sistemi ve oyuncak bir dilden oluşur
    • Principia Softwarica ise karşıt bir yaklaşım benimseyerek gerçek donanım üzerinde çalışan gerçek kodu ve gerçek bir işletim sistemini açıklar
  • Computer Systems: A Programmer's Perspective, CS:APP olarak bilinir ve bellek yerleşimi, linking, sanal bellek ve concurrency gibi sistem programlama kavramlarını açıklayan mükemmel bir ders kitabıdır
    • CS:APP kavram düzeyinde kalır; gerçek bir kernel, gerçek bir linker ya da gerçek bir derleyicinin kaynak kodunu göstermez
    • Principia Softwarica, bu kaynak kodlarını satır satır açıklayarak CS:APP'yi tamamlar

Gelişim geçmişi ve yazar

  • Principia Softwarica web sitesi Mart 2026'da yayımlandı
  • 2025'te proje yeniden ele alındı; QEMU ve Raspberry Pi üzerinde yeniden derlenip çalıştırılabilir hale getirildi, Dockerfile ve CI eklendi
  • 2019'dan 2024'e kadar Semgrep çalışmaları nedeniyle bir ara verildi
  • 2017'de kernel Raspberry Pi'ye port edildi ve Shell ile Graphics kitapları üzerinde çalışıldı
  • 2016'da Build System kitabı tamamlandı ve ilk Libcore ile Compiler literate programları oluşturuldu
  • 2015'te Assembler ve Linker kitapları tamamlandı ve Knuth ile tanışıldı
  • 2014'te Plan 9 fork edilip macOS üzerinde çapraz derlendi; ilk literate programlar yazılarak proje başlatıldı
  • Principia Softwarica, Yoann Padioleau tarafından yazıldı; kod tabanı Ken Thompson, Rob Pike, Dave Presotto, Phil Winterbottom, Tom Duff, Andrew Hume ve Russ Cox'un kodlarını içerir
  • Principia Mathematica matematiğin temellerini ele aldığı gibi, Principia Softwarica'nın amacı da temel sistem programlarını ele almaktır

1 yorum

 
GN⁺ 1 시간 전
Lobste.rs görüşleri
  • Başlığın açıkça Principia Mathematica'ya gönderme yaptığı belli, ancak “softwarica” Latince değil
    Latince gibi görünmesi için yazılmış ama foo(bar; baz] gibi bozulmuş bir C fonksiyon çağrısı hissi veriyor; daha iyi başlıklar “Principia Programmatum” (programların ilkeleri) ya da “Principia Artis Programmatoriae” (programlama sanatının ilkeleri) olabilir

    • Teknik olarak bakılırsa “Programmatum” da aslında yok; en yakın biçim olan “Programmum” ise program değil, “ilan, buyruk” anlamına geliyor
      Latincede yazılım ya da programlamayı karşılayan bir sözcük olmadığı için yeni bir kelime türetmek de makul
      “Programmum/Programmatum”un daha inandırıcı gelmesinin nedeni, İngilizce “program”ın Fransızca “programme”dan, onun da Latince “programmum”dan gelmesi
      Fransızca logiciel sözcüğünden daha doğrudan gidilirse “logique” (mantık) + “iel” (matériel'den gelen bir ek) yapısı var; bunu Latince “logica”, “materialis/materia” ile ilişkilendirip “program”ı “logicia”, “programs”ı da “logicium” olarak çevirmek de mümkün olabilir
      Yine de Latinceyi lisede sadece 2 yıl okuduğum için emin değilim
    • “Principia Programmatica” da mümkün görünüyor
    • Bence asıl mesele, Latincenin bilerek bozulmuş olması
      Zaten ölü bir dil ve başlık da iyi bilinen başarısız bir projeye gönderme yapıyor; dolayısıyla bugün İngilizce bir kitaba düzgün Latince başlık koymak başlı başına biraz komik duruyor
      Eskiden Latinceyi oldukça akıcı okuyabilen biri olarak bana da öyle geliyor
  • İlk başta Plan 9 referansında duraksadım ama yazarın neden Plan 9'u seçtiğine dair ayrıntılı açıklamayı beğendim
    Özeti, küçük olması; ve bu açıklamanın kendisi kitabı tanıtan çok iyi bir yazı gibi okunuyor

    • Plan 9 referansında neden duraksadığını merak ettim
  • Yazarın OCaml'ı Plan 9'a portladıktan sonra, C'de neler olduğunu daha iyi anlamak için kullanıcı alanının büyük bir bölümünü OCaml ile yeniden yazmış olmasını beğendim
    Bu süreçte kod şaşırtıcı biçimde Windows'ta da çalışabilir hale gelmiş; buna kimin finansman sağladığını da merak ediyorum

  • Gerçekten akıl almaz büyüklükte bir iş
    17 cilt, 6 binden fazla sayfa ve sanki hepsi geçen hafta yayımlanmış gibi görünüyor
    Yazar hakkında ek bağlam ya da arka plan bilen biri var mı diye merak ediyorum

  • Principia Softwarica, programcıların kullandığı temel programların tüm kaynak kodunu ayrıntılı biçimde açıklayarak bilgisayarın iç işleyişini anlatan bir kitap serisi
    Çekirdek, kabuk, pencere sistemi, derleyici, bağlayıcı, editör, hata ayıklayıcı gibi bileşenler ayrı kitaplarda ele alınıyor ve hedef işletim sistemi Plan 9 gibi görünüyor

    • “Hedef işletim sistemi Plan 9 gibi görünüyor” demek çok isabetsiz bir özet
      Sayfada Learn Here, Apply Everywhere yazıyor ve Plan 9 kullanmanız gerekmediği açıklanıyor
      Fikir şu: küçük ve zarif bir işletim sistemini anlarsanız Linux, macOS, hatta Windows hakkında bile daha derin bir sezgi kazanabilirsiniz
  • Yazarın ne demek istediğini anlıyorum ama “Oberon sadece Oberon programlarını çalıştırabilir” ifadesi Oberon sisteminin bir kısıtı olarak görülmemeli
    İlke olarak herhangi bir programlama dili o mimariyi ve çalışma zamanını hedefleyebilir

  • Bunun Plan 9'dan çatallanmış olduğunu anladım ama Plan 9 ile Inferno arasında hangisinin daha iyi olduğunu merak ediyorum

  • Oldukça iddialı bir proje gibi görünüyor
    İyi kod okumak, özellikle de tasarım tercihlerini açıklayan kod okumak, insanı daha iyi bir programcı yapar diye düşünüyorum
    Kendi alanınızın biraz dışındaki kod söz konusuysa bu daha da geçerli; bu da harika bir öğrenme aracı olabilir