3 puan yazan GN⁺ 2024-05-25 | 1 yorum | WhatsApp'ta paylaş
  • Kişisel bir dinlenme projesi olarak başlayan Bunnix, x86_64 hedefli Unix benzeri bir işletim sisteminin yaklaşık bir ayda ne kadar ileri götürülebileceğini denedi ve fiili çalışma günü olarak 27 gün sürdü
  • Çekirdek ağırlıklı olarak Hare ile yazıldı; ext4 desteği için lwext4 ve çekirdek video terminali için libvterm gibi C bileşenleri de kullanıldı
  • Hem legacy boot hem de EFI destekleniyor ve bazı gerçek dizüstü bilgisayarlarda test edildi; ancak USB desteği olmadığı için PS/2 klavye ya da BIOS’un PS/2 emülasyonu gerekiyor
  • Kullanıcı alanı dash, Doom, gzip, less, mandoc, sbase, tcc, Vim 5.7 gibi ağırlıklı olarak üçüncü taraf yazılımlardan oluşuyor; libc ise musl libc’nin Bunnix’e uyarlanmış hâli
  • Bunnix çalışıyor ancak çok hatalı ve tek kullanıcılı bir sistem olarak kalıyor; uzun vadeli bakımdan çok, Helios’un yeniden işlenmesine ve çekirdek tasarımının iyileştirilmesine uzanan bir deney niteliğinde

Bunnix’in kapsamı ve çalıştırılması

  • Bunnix, 21 Nisan 2024’te başlatılmış, x86_64 hedefli Unix benzeri işletim sistemi projesidir
  • Fiilen çalışılmayan günler hariç toplam 27 gün harcandı
  • Doğrudan çalıştırılabilecek Bunnix 0.0.0 iso sağlanıyor
  • qemu’da ISO şu komutla önyüklenebilir
qemu-system-x86_64 -cdrom bunnix.iso -display sdl -serial stdio
  • ISO’yu bir USB belleğe yazdırarak gerçek donanımda da önyükleme yapılabilir
    • Çoğu AMD64 makinede çalışma olasılığı var
    • ThinkPad X220 ve Starlabs Starbook Mk IV üzerinde test edildi
    • Hem legacy boot hem de EFI destekleniyor
  • Çalıştırmadaki en büyük kısıt USB desteğinin olmaması
    • PS/2 klavye veya BIOS’un PS/2 emülasyonu gerekiyor
    • Çoğu dizüstü klavyesi PS/2 yöntemiyle bağlıdır
    • USB klavyelerde PS/2 emülasyonunun çalışıp çalışmaması ortama göre değişir
  • Doom portunda tuş atamaları ve çıkış davranışıyla ilgili kısıtlar var
    • WASD ile hareket
    • Sağ Shift ile ateş
    • Space ile kapı açma
    • Oyundan çıkış çalışmadığı için oynadıktan sonra yeniden başlatmak gerekiyor

Çekirdek yapısı ve desteklenen özellikler

  • Bunnix çekirdeği büyük ölçüde Hare ile yazıldı ve bazı C bileşenleri de kullanıldı
    • ext4 dosya sistemi desteği için lwext4 kullanılıyor
    • Çekirdek video terminali için libvterm kullanılıyor
  • Desteklenen sürücüler, temel donanım ve depolama aygıtından önyükleme için gereken kapsamda yoğunlaşıyor
    • PCI legacy
    • AHCI blok aygıtı
    • GPT ve MBR bölüm tabloları
    • PS/2 klavye
    • Platform seri portu
    • CMOS saati
    • Önyükleyicinin ayarladığı framebuffer
    • ext4 ve memfs dosya sistemleri
  • Unix benzeri bir sistem için gereken temel çekirdek özellikleri de içeriyor
    • Sanal dosya sistemi ve aygıtlar

      • Blok aygıtları, null, zero, full sözde aygıtları, /dev/kbd, /dev/fb0, seri ve video TTY’leri, /dev/tty denetim terminaliyle birlikte /dev sunar
      • Görece tamamlanmış bir terminal emülatörü ve bir ölçüde çalışan termios desteği içerir
    • Sistem çağrıları ve kullanıcı modeli

      • clock_gettime, poll, openat, fork, exec, pipe, dup, dup2, ioctl dâhil yaklaşık 40 sistem çağrısını destekler
      • Bunnix şu anda tek kullanıcılı bir sistemdir
      • Unix dosya kiplerini ve sahipliğini zorunlu kılmaz
      • Birkaç gün daha çalışmayla çok kullanıcılı sisteme dönüştürülebilecek durumdadır

Önyükleyici ve kullanıcı alanı

  • Bunnix iki önyükleyici içeriyor
    • legacy boot için önyükleyici multiboot uyumludur ve Hare ile yazılmıştır
    • EFI için önyükleyici C ile yazılmıştır
  • İki önyükleyici de gerektiğinde çekirdeği ELF dosyası ve initramfs olarak yükler
    • EFI önyükleyicisi initramfs sıkıştırmasını açmak için zlib içerir
    • multiboot uyumlu önyükleyici sıkıştırma açma işlemini onun yerine üstlenir
  • Kullanıcı alanı çoğunlukla üçüncü taraf kaynaklardan oluşur
    • Colossal Cave Adventure advent
    • dash /bin/sh
    • Doom
    • gzip
    • less
    • lok /bin/awk
    • lolcat
    • mandoc
    • sbase core utils
    • tcc C derleyicisi
    • Vim 5.7
  • libc, musl libc’den türetildi ve Bunnix gereksinimlerine göre çeşitli değişiklikler içeriyor
  • curses kütüphanesi netbsd-curses tabanlıdır
  • Sistem çalışıyor ancak çok hatalı ve bazı uygulamalar aceleyle yapıldığı için çökmelere hazırlıklı olmak gerekir

Hızlı uygulamayı mümkün kılan etkenler ve zorluklar

  • Bunnix kodunun bir kısmı önceki proje Helios’tan geldi
    • GDT, IDT gibi genel CPU kurulumu ile ilgili bazı çekirdek kodları buna dâhil
    • AHCI gibi bazı sürücüler de Bunnix sistemine uyarlanmış durumda
    • Helios deneyimi olmasaydı Bunnix’i bu kadar hızlı yapmanın zor olacağı düşünülüyor
  • ext4 desteği ve sanal terminal entegrasyonu özellikle zordu
    • lwext4 ve libvterm adlı dış bağımlılıklar getirildi
    • Dosya sistemi katmanı birkaç kez yeniden yazıldı ve hâlâ hatalar var
    • openat ve inode işleme dâhil Unix dosya sistemi tasarımını düzgün uygulamak için lwext4’ün içlerine daha fazla bakmak gerekti
  • Hare projesi içinde Hare, assembly ve C kaynaklarını birlikte linkleme deneyimi de kazanıldı
    • Genel olarak iyi çalıştı ancak ABI entegrasyon düzeneği oluşturma kısmında rahatsız edici noktalar vardı
    • C header’larını Hare forward declaration modüllerine otomatik dönüştürmenin iyi olacağı ihtiyacı doğdu
    • İlgili çalışmanın bir kısmı hare-c içinde var ancak hâlâ daha fazlası gerekiyor
  • Vim portunu hedeflemek terminal uygulamasının zorluğunu artırdı
    • libvterm iyi bir terminal durum makinesi kütüphanesi olsa da dokümantasyonu yetersiz
    • Doğru entegrasyon için çok sayıda ince ayar gerekti
    • Akıcı çalışması için performans optimizasyonuna da zaman harcandı
  • Zamanlayıcı, Helios tabanlı kodun önemli ölçüde atılıp yeniden yazıldığı bir alan oldu
    • Helios ve Bunnix’in ikisi de tek CPU’lu sistemler
    • Bunnix, Helios’tan farklı olarak çekirdek içinde bağlam değiştirmeye izin veriyor
    • Öncelikli görev geçişi de çekirdek üzerinden girip çıkıyor
    • Bu yapı birden çok çekirdek yığını ve farklı bir görev geçiş yöntemi gerektiriyor
    • Yeterince sağlam bir zamanlayıcı olduğunda disk okuma veya pipe(2) gibi bloklayan işleri wait queue ile basitçe uygulamak mümkün oluyor
  • Sinyal uygulaması Unix uyumluluğu için gerekliydi
    • Helios Unix’i hedeflemediği için sinyaller olmadan da çalışıyor
    • Bunnix’te esas olarak dash portu için SIGCHLD’nin doğru çalışmasına odaklanıldı
    • Nihai sinyal uygulaması çok temel düzeyde

Helios’a uzanan tasarım dersleri

  • Bunnix monolitik çekirdek, Helios ise Unix olmayan bir mikroçekirdek tasarımıdır
  • Dosya sisteminde önbelleklemenin önemi doğrulandı
    • Helios, dosya sistemi uygulamasını birden çok sürücüye ve ayrı süreçlere bölmüş durumda
    • Yalnızca canlı nesneleri izlemek için bile dosya sistemi katmanında önbellekleme önemlidir
    • Helios yeniden işlenirken dosya sistemi kodunda refaktör etme ya da yeniden yazma işi artacak
  • Sürücü erişimi monolitik çekirdekte doğal olarak daha basit
    • Ancak ring 0’a çok şey koyulmasından tamamen memnun değil
    • Helios zamanlayıcısına monolitik tasarımın kontrol akışı unsurlarını kısmen yansıtma olasılığı var
  • Bellek yönetiminde bitmap allocator beklenenden daha iyi çalıştı
    • Helios’ta bitmap allocator’dan kaçınılmaya çalışılmıştı ve bellek yönetimi büyük bir rahatsızlık noktasıydı
    • Bunnix, sistemin tüm genel sayfaları için basit bir bitmap allocator kullanıyor
    • Endişe edilenden daha az overhead yarattı ve çok iyi çalıştı
  • Bunnix’i 30 gün içinde yapmak mikroçekirdek tasarımıyla mümkün olmazdı diye düşünülüyor
    • Monolitik çekirdeğin uygulanması çok daha basit
    • Mikroçekirdek tasarımının avantajları da çekici; daha iyi cevap hibrit çekirdek olabilir

Proje durumu ve kalan iyileştirme adayları

  • Bunnix, bundan sonra çok daha fazla zaman harcanacak bir hedeften çok, neredeyse tamamlanmış bir sanat projesi niteliğinde
    • Zaman zaman birkaç gün çalışılabilir
    • Topluluk iyileştirmeleri için yamalar public inbox üzerinden alınabilir
  • Bundan sonraki işletim sistemi geliştirme, Bunnix’ten çıkarılan derslerle Helios’a dönüp büyük yeniden tasarımlar yapma yönünde olacak
  • İyileştirme önceliği adayları şöyle
    • Dosya sistemi için dizin önbelleği ve genel önbellekleme iyileştirmeleri
    • ext4 hata düzeltmeleri
    • procfs ve top
    • Dosya mmap’i
    • SIGSEGV gibi ek sinyaller
    • Çok kullanıcılı destek
    • NVMe blok aygıtı
    • IDE blok aygıtı
    • ATAPI ve ISO 9660 desteği
    • Intel HD audio desteği
    • Ağ yığını
    • Temel sistemde Hare toolchain’i
    • Self-hosting

1 yorum

 
GN⁺ 2024-05-25
Hacker News yorumları
  • Gerçekten harika. Orijinal Unix’in de Ritchie ailesi, kayınpederi ve kayınvalidesini görmek için Kaliforniya’ya tatile gittiği birkaç hafta içinde yapıldığı hikâyesini hatırlatıyor
    Kaynak: Brian W. Kernighan’ın UNIX: A History and a Memoir kitabı

    • Unix’i kullanmadan önce zaten uzun süre Multics üzerinde çalışmış olmaları önemli. Yanlış hatırlamıyorsam Unix, onun “basitleştirilmiş” bir sürümüne daha yakındı; bir anda yoktan var olmadı
    • Muhtemelen Ken Thompson’dan bahsediyorsun. YouTube röportajını aramaya üşeniyorum ama birkaç kez, disk sürücüsü ve bazı programlar ile başka bileşenlerin zaten hazır olduğu; eşi seyahate çıkınca boşlukları doldurup bunu tam bir işletim sistemine dönüştürmek için zamanı olacağını düşündüğü yönünde bir hikâye anlattığını hatırlıyorum
    • Unix’in kendisinin uzun sürdüğünü söylemek gerekir. V7’yi “doğru düzgün tamamlanmış Unix” sayarsak birkaç yıl sürdü; ilk sürüm ise örneğin sadece dosya sisteminden ibaretti
    • Benim bildiğim, eksik olan 3 programla ilgili bir hikâyeydi; bunlardan biri de metin düzenleyiciydi
      Şu an hafızam biraz bulanık, kontrol etmem gerekecek
    • Dennis Ritchie ile Ken Thompson’ı karıştırmış gibisin
  • “Sinyallerin baştan sona nasıl çalıştığını sonunda öğrendim ve gerçekten çirkin. Bunu Unix tasarımının en zayıf yanlarından biri olarak hep hissetmiştim; bu proje de fikrimi değiştirmedi” kısmı hakkında daha ayrıntılı kaynaklar varsa görmek isterim. HN kullanıcıları ya da yazar bir şey biliyorsa merak ederim

    • Henüz bakmadıysan Stevens’ın Advanced Programming in the Unix Environment kitabıyla başlardım
      https://www.amazon.com/Advanced-Programming-UNIX-Environment...
      Kullanıcı alanında sinyaller ve süreçler dahil Unix API’sini ele almanın sorumluluğu
      Çekirdek içinde sinyalleri uygulamak istiyorsan ne önereceğimi tam bilmiyorum ama aklıma muhtemelen https://pdos.csail.mit.edu/6.828/2012/xv6.html gelir
      Unix’in nasıl çalıştığını kendi kendine yeten örneklerle açık ve sistemli biçimde anlatan bir kitap okumak gerçekten ferahlatıcı. C bilmiyorsan bu bir engel olabilir ama blog yazısını okurken de aynı şey geçerli
      Eşdeğer bilginin web’de bir yerlerde olduğunu sanmıyorum. Kendi blogumda da insanların hâlâ okuduğu çok Unix kırıntı bilgisi var ama aynı seviyede değil
      Unix sinyallerini anlamak için blog yazıları, Google ve LLM’lerle yaklaşmanın çok verimsiz olduğu konulardan biri olduğunu düşünüyorum. İkinci elde bile “ucuz” demek zor ama içindeki bilgi değerli olduğu için fiyatı yüksek kalan bir kitap; çalışan bir programcı içinse görece ucuz
    • Sinyaller, asenkron giriş/çıkış/sistem çağrıları ile süreçler arası iletişimin kesiştiği yerde duruyor. Asenkronluk ve IPC de zaten Unix tasarımının zayıf yanlarıydı ve baştan beri var olan unsurlar değildi
      Sinyaller, tasarıma asenkron IPC’yi zorla yamamaya yönelik hantal bir girişim olduğundan yarış durumlarına açık. Sinyal işlenirken bir sinyal daha gelirse ne olacağı, süreç bir sistem çağrısının içindeyken sinyalle ne yapılacağı da belirsiz. Ertelenecek mi, kuyruğa mı alınacak, sistem çağrısından mı çıkarılacak karar vermek gerekiyor
      Tüm sistem çağrıları asenkron olsaydı, birçok modern işletim sisteminin izlediği tasarım ilkelerinde olduğu gibi bu yön çözülmüş olurdu. IPC’de güvenilir kanal benzeri bir sistem olsaydı, yalnızca sinyaller değil daha incelikli asenkron süreçler arası iletişim veya prosedür çağrıları da uygulanabilirdi
    • Unix sinyalleri birbirinden farklı çok fazla kavramı üstlendiği için bazı insanların hoşlanmadığını düşünüyorum
      SIGSTOP/SIGCONT/SIGKILL aslında sürece sinyal göndermekten çok duraklatma, sürdürme, sonlandırma gibi süreç kontrolü yapıyor
      SIGHUP, SIGUSR1, SIGUSR2, SIGTTIN, SIGTTOU gibi basit asenkron mesajlar yapılandırmayı yeniden okuma gibi işlerde kötüye kullanılıyor; daemonlaştırma için nohup gibi hack tarzı dolanma yolları ekleniyor. gunicorn son ikisini dinamik ölçek büyütme/küçültmede de kullanıyor. Bu kategoride SIGWINCH gibi tuhaf derecede spesifik olanlar da var
      Ayrıca SIGILL, SIGSEGV, SIGFPE gibi geçersiz komut, segmentasyon ihlali, kayan nokta istisnasını gösterenler de var. En başta asenkron bırakmanın iyi olup olmadığı belirsiz olan SIGSYS gibi şeyler de mevcut
      Başka yaklaşımların da trade-off’ları var. Windows’ta event’ler, SEH, CTRL+C/CTRL+BREAK/sonlandırma işleme rutinleri, IOCP, callback’ler vb. var; Plan 9’daki notes ise string olduğu için başka süreçlere keyfi veri gönderebilmesi güzel, ama süreç kontrolünde de aynı mekanizmayı kullanmak *nix ile aynı dezavantaja sahip ve sayı yerine yalnızca string kullanıyor diye düşünüyorum
    • “signalfd is useless” iyi bir yazı: https://ldpreload.com/blog/signalfd-is-useless
      Unix sinyallerinin sorunlarını ele alıyor ve Linux’un bunları çözmek için oluşturduğu signalfd’nin neden iyi çalışmadığını da açıklıyor
    • Taşınabilir uygulama yazarken BSD ile SYSV’nin sinyal işleme farkları sorun oluyordu
      https://pubs.opengroup.org/onlinepubs/009604499/functions/bs...
      Sinyal işleyicisinin içindeki kodun yeniden girişli olması gerektiği de önemli. “Yeniden girişli olmayan bir fonksiyonu bir sinyal işleyicisinden çağırmak genellikle güvenli değildir”
      https://man7.org/linux/man-pages/man7/signal-safety.7.html
  • Hare ile ilgileniyordum; bu SSS maddesini görünce bunun oldukça kendi kendini sabote eden bir politika olduğunu düşündüm: https://harelang.org/documentation/faq.html#will-hare-suppor...
    Temelde geliştiricilerin istedikleri lisansı kullanmalarını, istedikleri işletim sistemini hedeflemelerini ve istedikleri kodu yazmalarını destekliyorum
    Ama bu, söz konusu politikanın iyi bir fikir olduğu anlamına gelmiyor. Özgür yazılım felsefesinin en uç ya da en ilkeli grubu sayılan FSF bile Windows ve POSIX’i destekliyor. Şikâyet edip ona Woe32 diyebilirsiniz ama Stallman, özgür yazılım projelerini tescilli sistemlerde de çalışır hâle getirmenin, tescilli yazılımsız bir dünya mücadelesine daha çok yardımcı olacağını epey ikna edici biçimde savunageldi
    Kütüphane kodu MPL ile lisanslandığı için Hare kullanmak tek başına sizi belirli bir lisansa bağlamıyor. Ancak masaüstlerinin %95’inden fazlasına “desteklemiyoruz, forumda sormayın, buraya gelmeyin” tavrıyla yaklaşan bir dilin ömrünün ne olacağını merak ediyorum
    İronik biçimde Google’da “harelang repo” araması yapınca ilk sonuç gayriresmî macOS portu; gerçek SourceHut deposu ise ilk sayfada görünmüyor
    Diller ya kartopu gibi büyür ya da yok olur. Şu anda bu yazıyı Mac’te yazıyorum ama istesem hemen şimdi bir Linux makinesi de kullanabilirim. Peki FSF’nin bile yapmadığı bir saflık testini geliştiriciye dayatan bir dili neden öğreneyim? Açık kaynak ve özgür yazılımın kayda değer bir bölümü Mac’te yazılıyor; sanılandan daha büyük bir bölümü de Windows’ta yazılıyor
    Bana göre Hare’i Odin ya da Zig’den ayıran şey tam da bu saflık ve dışlayıcılık tavrı. Keyifli hack’ler ve başarı diliyorum ama ikincisi konusunda kötümserim

    • Bir yandan yazarların neyi başarmak istediklerine bağlı kalmalarına ve her talebi kabul etmemelerine saygı duyabiliyorum
      Öte yandan SSS’de kaş kaldırtan tek yer bu değil
      “Paket yöneticisi yok ve ortak bir değer olarak kod yeniden kullanımını daha az teşvik ediyor”
      “qbe, LLVM’den daha yavaş kod üretir; performans, benzer LLVM üretimli koda kıyasla çalışma zamanı performansının %25–75’i aralığındadır”
      “Hare’de çok iş parçacıklılığı kullanabilir miyim? Muhtemelen hayır”
      “O zaman hash tablosunu kendim mi uygulamalıyım? Evet. Hash tabloları, birçok Hare programının sıfırdan uygulamak zorunda kalacağı yaygın bir veri yapısıdır”
      Şimdilik yaygın benimsenmeyi hedefleyerek tasarlanmış bir dil kesinlikle değil. Bu sorun değil; en azından bu konuda dürüstler
    • “Dayatmak” ifadesine katılmıyorum. Birisi ücretsiz olarak bir şey yapıyorsa, kötü niyetli olmadığı sürece onu belirli bir şekilde yapma yükümlülüğü yoktur
      Fikrinizi ifade etmekte özgürsünüz, ama geliştirici zaten ilkeleri belirlemişken bu tür bir eleştirinin yapıcı olmadığını düşünüyorum
    • Sanırım siz ve Hare tarafı başarının tanımı konusunda farklı düşünüyorsunuz. “Diller ya kartopu gibi büyür ya da yok olur” sözü de, rock yıldızı düzeyinde popüler olmasa bile onlarca yıl boyunca istikrarlı şekilde ilerlemiş pek çok dili epey küçümseyen bir ifade gibi geliyor
      Dinlemeye değer olmak için her grubun Billboard listelerine girmesi gerekmez
    • Resmî olarak Windows ya da macOS’u desteklemeyecekleri anlamına geliyor. İsterlerse başka projeler port etmeyi deneyemez mi? Hedeflenen destek seviyesini dürüstçe belirtmek iyi görünüyor
      Geliştiricilerin kullanmadığı işletim sistemlerini desteklemek büyük bir talep
    • “Diller ya kartopu gibi büyür ya da yok olur” sözü doğru değil ve safça bir ifade
      Genel olarak çok popüler olmasa da sağlam bir nişte gelişen ve önemli rol oynayan epey dil var
  • Etkileyici, çok havalı ve ilham verici. “X günde etkileyici bir şey yapmak” türü örnekler, yıllar boyunca birikmiş deneyim ve yetenek gerektirir

    • Günümüzle kıyaslayınca, ben uluslararasılaştırılmış dizgiler içeren bir düğme metnini değiştirmek için neredeyse bir hafta harcadım
      İngilizce dizgiyi kataloğa koymam, çeşitli testleri güncellemem, yerel sistemde testleri çalıştırmam, değişiklikleri staging kümesine göndermem, beklenmedik test hatalarını düzeltmem, production’a almam, çeviri sorumlusundan birkaç dilde çeviri istemem ve dokümantasyonu da güncellemem gerekti
    • 12 yıldan da önce yalnızca Z80 assembly ile yazılmış KnightOS’un da yaratıcısı
      https://www.ticalc.org/archives/files/fileinfo/463/46387.htm...
    • Drew zeki ve takvim de kısaydı, ama ona sadece methiyeler düzmek bence yanlış bakış açısı. Bir UNIX klonu yapmak çoğu üniversitede yaygın bir lisans projesidir
      Bunu olgun bir şeye dönüştürmek için gereken şey özel bir dehadan çok azimdir
    • Ayrıca önceki çekirdek uygulaması Helios vardı ve en alt seviye kodun önemli bir kısmını sağladı. Başarıyı küçümsemeye çalışmıyorum ama DD, bu projenin hızının önemli ölçüde önce Helios’u yapmış olmasına ve o kodu yeniden kullanmasına bağlı olduğunu epey açıkça söylüyor
    • Helios olduğu için eksik birkaç parçayı bütünleştirmiş oldu
  • Mastodon’da neredeyse her gün gelen güncellemeleri görmek gerçekten harikaydı. Deneyimli birinin karmaşık yazılımı parça parça nasıl bir araya getirdiğini izlemek mümkündü

  • Kod burada: https://git.sr.ht/~sircmpwn/bunnix/tree/master
    GPLv3 lisanslı

  • Kullanıcı alanı çoğunlukla üçüncü taraf kaynaklardan birleştirilmiş
    ISO’ya tıkladığımda 60MB indirme çıkınca ilk başta şaşırdım, ama nedeni anlaşıldı
    Karşılaştırma için, Linux 0.01 71KB’lık bir indirmeydi ama yalnızca çekirdek kaynaklarını içeriyordu

  • Hare ilginç bir dil gibi görünüyor
    Ancak bu çok çekirdekli çağda aşağıdaki sınırlamanın benimsenmesini kısıtlayacağını düşünüyorum
    FAQ’a https://harelang.org/documentation/faq.html göre, Hare’de multithreading kullanılıp kullanılamayacağı sorusuna “muhtemelen hayır” yanıtı veriliyor
    G/Ç işlemlerini çoklamak için event loop, CPU kaynaklarını paralel kullanmak gerektiğinde ise paylaşımlı bellekle birlikte çoklu süreç öneriliyor
    Teknik olarak Hare programında thread oluşturmak mümkün. libc’ye linkleyip pthreads kullanabilir ya da clone(2) sistem çağrısını doğrudan kullanabilirsiniz. Helios gibi Hare ile uygulanmış işletim sistemleri genellikle multithreading’i uygular
    Ancak upstream standart kütüphane yeniden girilebilirlik garantisi vermediğinden, kendi ayağınıza sıkmamak tamamen sizin sorumluluğunuzda

    • “CPU kaynaklarını paralel kullanmanız gerekiyorsa paylaşımlı bellekle birlikte çoklu süreç” yaklaşımı pratikte oldukça güçlü
      Kişisel olarak çoğu kullanım için bu yöntemi tercih ediyorum; çünkü veri yarışı olasılığını yalnızca paylaşımlı bellek bölgesiyle sınırlandırıyor. Veri yarışı açısından belleğin “unsafe block”u gibi hissettiriyor
    • Upstream standart kütüphane yeniden girilebilirliği garanti etmiyorsa, bu yalnızca multithreading’i değil interrupt içinde kullanımı da dışlar. “Sistem programlama dili” için bunun oldukça büyük bir kısıtlama olduğunu düşünüyorum
    • Closure olsaydı iyi olurdu
  • “Linux System Call Table – Chromiumos” https://www.chromium.org/chromium-os/developer-library/refer... https://news.ycombinator.com/item?id=33395777 içeriğinden alınmış
    google/syzkalleR
    Fuschia / Zircon sistem çağrıları: https://fuchsia.dev/fuchsia-src/reference/syscalls