3 puan yazan GN⁺ 2025-09-24 | 3 yorum | WhatsApp'ta paylaş
  • libghostty, herhangi bir uygulamada kullanılabilecek bir gömülü terminal emülatörü kütüphanesi olarak geliştiriliyor
  • İlk bileşen olan libghostty-vt, ayrıştırma ve durum yönetimi için optimize edilmiş, bağımlılıksız bir API
  • Terminal emülasyonunun karmaşıklığı ve tekrar eden uygulama sorunlarını çözmek için ortaya çıktı; çapraz platform ve yüksek taşınabilirlik hedefliyor
  • İleride klavye girdi işleme, GPU render etme, çeşitli framework entegrasyonları gibi ek kütüphane genişlemeleri planlanıyor
  • Şu anda Zig API test edilebiliyor; C API de yakında yayımlanacak ve kullanıcı geri bildirimleri aktif biçimde dinleniyor

Giriş ve libghostty'nin geliştirilme arka planı

  • libghostty, tüm uygulamalara modern, hızlı ve eksiksiz terminal emülatörü özelliklerini gömebilmek için tasarlanmış bir kütüphane projesi
  • Bugün çok sayıda program ya terminal emülatörünü kendi yöntemiyle doğrudan uyguluyor ya da terminal işlevlerinin çok sınırlı bir biçimini ayrıca geliştiriyor
  • Bu şekilde ayrı ayrı geliştirilen terminal emülasyonu implementasyonları çoğu zaman ad-hoc, tek seferlik kod tabanları oluyor; istisna durumları ve karmaşıklığı yeterince ele alamadıkları için sık sık eksiklik, hata ve performans düşüşü sorunları yaşıyorlar
  • Çoğu geliştirici açısından terminal emülasyonu uygulamak temel iş alanı olmadığından, ortak ve yeniden kullanılabilir bir çözüm ihtiyacı bulunuyor
  • libghostty, minimum bağımlılıkla tasarlanmış bir çapraz platform C API sunuyor; böylece çeşitli uygulamalar güvenilir ve hızlı terminal emülasyonu işlevlerinden yararlanabiliyor

libghostty-vt: ilk kütüphanenin başlangıcı

  • libghostty-vt, hiç bağımlılığı olmayan (hatta libc bile gerektirmeyen) bir kütüphane; terminal dizilerini ayrıştırma ile imleç konumu, stil, satır kaydırma gibi terminal durumunu koruma işlevleri için API sunuyor
  • Bu terminal dizisi ayrıştırma işi yalnızca terminal emülatörünün çekirdek özelliği değil; aynı zamanda basit stil çıktısı gerektiren sitelerde de (GitHub Actions, Vercel build logları vb.) zorunlu bir rol oynuyor
  • Terminal protokolü ayrıştırma yüzeyde basit görünse de uygulama zorluğu çok yüksek; gerçekten de Jediterm gibi çeşitli implementasyonlarda bazı dizilerin işlenmesinde sorun görülen örnekler var
  • Bazı geliştiriciler yalnızca ANSI dizilerini basitçe ayrıştırmakla yetiniyor, ancak karmaşık stil işleme gereksinimleri (çeşitli RGB gösterim biçimleri vb.) ve tam uyumluluk beklentisi nedeniyle gelişmiş bir parser şart
  • libghostty-vt, Ghostty'nin doğrulanmış çekirdeğinden çıkarıldı; SIMD optimize ayrıştırma, güçlü Unicode desteği, gelişmiş bellek yapısı, geniş protokol uyumluluğu (Kitty Graphics, Tmux Control Mode vb.) sunuyor
  • Tek dosyalık sıfır bağımlılıklı C API olarak sağlanıyor; bu sayede tüm genel amaçlı diller ve ortamlara kolayca gömülebiliyor. Öncelikli destek macOS ve Linux (x86_64, aarch64) için; zamanla Windows, gömülü sistemler ve WASM gibi alanlara genişlemesi planlanıyor
  • Ghostty GUI'den daha kapsayıcı bir hedef platform desteği mümkün

Uzun vadede genişleyecek libghostty

  • libghostty-vt sonrasında girdi işleme (klavye kodlama vb.), GPU render etme (OpenGL, Metal), GTK widget'ı ve Swift framework'ü gibi ek işlevler sunan kütüphane ailesi peş peşe yayımlanacak
  • Bu işlevsel genişlemeler modül bazında yapılandırılacak; böylece bağımlılıklar, kod boyutu ve bakım karmaşıklığı en aza indirilecek

libghostty-vt geliştirme durumu

  • libghostty-vtyi dışarıya bir Zig modülü olarak açan PR (pull request) yakın zamanda merge edildi; Zig geliştiricileri hemen kullanabiliyor
  • C API'nin tanımlama çalışmaları sürüyor ve yakında test amaçlı sunulacak (çekirdek mantık zaten yıllardır Ghostty içinde kullanılan, doğrulanmış bir kaynak)
  • Ghostty macOS uygulaması da dahili kullanım için C API kullanıyor, ancak mevcut dahili header'lar dışa açık yayın ve genel kullanım için uygun olmadığından tamamen yeni bir C API tasarlanıyor
  • libghostty, Ghostty uygulamasından ayrı sürüm yönetimi yapıyor; şu anda alfa aşamasında ve erken benimseme ile dil binding geliştiricilerinin katılımı bekleniyor
  • İlk etiketli sürümün 6 ay içinde çıkarılması hedefleniyor

Kullanıcı geri bildirimi çağrısı

  • Şu anda API tasarım aşaması olduğu için gerçek kullanıcı görüşleri ve geri bildirimleri çok kritik
  • Ghostty dışında da çeşitli topluluk üyeleri libghostty tabanlı projeler geliştiriyor ve daha fazla kullanıcının katılması umuluyor
  • Projeyi kullanma fikirleriniz veya ihtiyaçlarınız varsa Ghostty Discord ya da e-posta üzerinden geliştiriciyle doğrudan iletişim kurulabiliyor
  • libghostty şu anda alfa sürümünde; API henüz kararlı değil, ancak çekirdek mantık gerçek kullanımda kanıtlanmış yüksek bir kararlılık sunuyor

Gelecek görünümü ve etkisi

  • Ghostty uygulamasının kararlılığa ulaşması sayesinde artık libghostty gibi daha büyük bir hedefe ilerlemek mümkün hale geldi
  • libghostty çeşitli uygulamalarda yaygın biçimde kullanılırsa, Ghostty tek bir uygulamanın ötesinde daha büyük bir ekosistem etkisi ve etki alanı oluşturabilir
  • libghostty'nin kullanımı arttıkça Ghostty'nin kendisi de daha zengin özellikler ve daha yüksek kararlılık kazanabilir
  • Ghostty ve libghostty birbirini tamamlayan bir yapıda gelişecek ve hem geliştiricilere hem de kullanıcılara fayda sağlayacak

3 yorum

 
yshrust 2025-09-24

1.0'dan beri kullanıyorum; scroll ve arama olmaması dışında memnunum haha. iterm kullanıyordum ama buna yerleştim.

 
GN⁺ 2025-09-24
Hacker News görüşleri
  • Bu kişinin şirket kurup halka açtıktan, ardından milyarlarca dolarlık bir satış yaptıktan sonra yeniden kod yazma dünyasına dönmesi gerçekten efsanevi.

    • Bence Hashimoto'nun asıl dehası sadece çok zeki olması değil; sistemleri ve arayüzleri aşırı derecede modüler kurup birbirine bağımlılığı en aza indiren sıra dışı soyutlama yeteneği gerçekten hayranlık uyandırıyor. Rich Hickey'nin savunduğu Simple Made Easy felsefesini birebir uygulayan biri gibi geliyor. Yazdığı yazılımlar, doğru çalışmak zorundaymış gibi hissettiren bir yapıyla tasarlanmış. Ayrıca Ghostty'yi ilk kez denedim; iTerm2 ve Zsh/Powerlevel10k temasında hep hafif bir render gecikmesi olurdu, ghostty'de ise neredeyse anında tepki veriyor.

    • Gerçekten kıskandırıcı ama aynı zamanda bir rüya hayatı gibi. Servet kazandıktan sonra sadece projenin kendisi için üretmeye devam etmek, para için kaliteden ödün vermek zorunda olmamak. Bu bana Knuth'un eski bir sözünü hatırlatıyor.

      Binlerce bilgisayar bilimcisinin gerçekten yapmak istediklerini özgürce yapabilmesi, bilimin ilerlemesini sağlar.

      Gerçekten de sevgiyle yapılan projeler giderek daha büyük başarı kazanıyor. Paraya saplantılı olunmadığında daha iyi sonuçlar üretilebildiğini gösteriyor. Öte yandan, böyle bir hayatı yaşayabilmek için belli bir sermayenin önceden mevcut olması gerektiği gerçeği, toplum yapımızı ve ekonomiyi yeniden düşündürüyor. Knuth'un dediği gibi, herkese biraz daha fazla zaman verilse muhtemelen herkes daha iyi işler çıkarabilir; ama her şeyi aceleye getirince çok şey feda ediliyor. Ve onun başka bir sözüyle,

      Her şeyi optimize etmeye çalışırsan asla mutlu olamazsın.

      Bu noktada şu soru doğuyor: Hayatı gerçekten kolaylaştıran ve sorunları gerçekten çözen insanları hak ettikleri gibi ödüllendiriyor muyuz, yoksa sadece anlamsız oyun skorlarını mı yükseltiyoruz? Daha çok efsane çıkarmanın yolu ne? Yönetim kuruluna kalitenin değerini anlatmak zorunda kalmadan, Mitchell gibi tutkusunun peşinden gidebileceği bir toplumu nasıl kurabiliriz diye düşünüyorum.

    • Onu gerçekten gördüm; çok sıcak ve iyi bir insandı. Hashicorp'u kurmadan önce Kiip'teyken bir konferansta birlikte öğle yemeği yemiştik. Mitchell tam anlamıyla gerçek bir hacker'dı. Bilgisayarla ilgili her şeyi içtenlikle sevdiği hissediliyordu. Özellikle dağıtık sistemler konferansında inanılmaz derinleşmişti. Ne yaparsa yapsın başarılı olacağına emindim. Ghostty'yi keşfedip kullanmaya başladığımdan beri memnuniyetle kullanıyorum.

    • Ve bu adam şimdi tty yazılımı geliştirmeye de kafayı takmış durumda; Unix teknoloji yığınının en tutkulu niş alanlarından biri.

    • ghostty'yi her gün kullanıyordum ama yaratıcısının Mitchell Hashimoto olduğunu ancak şimdi öğrendim; gerçekten çok havalı.

  • Ghostty gerçekten harika; gerçek bir omni-platform terminal emülatörünün mobile kadar genişleyebilmesi çok heyecan verici. Ghostty'nin Zig ile yazılmış olması da ilginç. Düzenli kullandığım ilk Zig tabanlı program ve depo yapısının Golang tarzıyla aynı olması bana eğlenceli geldi. https://github.com/ghostty-org/ghostty

    • (Go düzenine benzemiyor.) Bu aslında iyi bir şey; go'nun pkg/, src/ gibi dizin yapıları pek de iyi değil.
  • Ghostty'yi gerçekten sevmek istiyorum ama bazı eksikleri var.

    • Henüz ⌘F ile arama desteği yok
    • Önceki çıktıyı ya da belirli bir dizgeyi yalnızca klavyeyle seçip kopyalamanın bir yolu yok
    • ⌘. tuşuyla CTRL-C gönderilemiyor (Mac kullanıcılarının beklediği bir özellik)
    • Yazı tipi render'ı hâlâ Terminal.app kadar pürüzsüz değil, font-thicken-strength ile ayarlamayı denedim ama %100 aynı olmuyor. Muhtemelen Metal render karakteristiği nedeniyle bu ya imkânsız ya da çok zor. Gün boyu metin izleyen biri için bu gerçekten çok önemli.
    • ⌘. basınca CTRL-C gönderen ayar yapılabiliyor.
      keybind = "cmd+.=text:\x03"
      
      İlgili tartışma: https://news.ycombinator.com/item?id=42889411
    • Yakında desteklenecek: https://ghostty.org/docs/install/release-notes/1-2-0#roadmap
    • Scrollback araması 1.3 sürümünde gelecek gibi görünüyor ama muhtemelen yaklaşık 6 ay daha var. Ghostty de son zamanlarda hızlı gelişiyor, bu yüzden 1.2 sürüm notlarına da bakmaya değer.
    • Oylar bir aşağı bir yukarı gidince yazdığım şeyin yanlış anlaşıldığını fark ettim. Aslında çapraz platform olup her üretici için ayrı native GUI uygulama fikri müthiş. Bu projenin gerçekten var olmasına çok seviniyorum, sadece bana göre henüz tam olgunlaşmış değil. Yine de umutla izliyorum.
    • İkinci eleştiri (klavyeyle önceki çıktıyı seçme) WezTerm kullanmaya devam etmemin ana sebebi.
  • Mitchell'in geliştirici deneyimine kattığı tutku ve gösterdiği detay seviyesi gerçekten olağanüstü. 2011'de Santa Monica'da Vagrant'ı ilk kullandığım zamanki etkiyi hâlâ hatırlıyorum. iTerm2'yi asla bırakmayı düşünmüyordum ama Ghostty'yi görünce anında vuruldum.

  • Son zamanlarda ghostty'yi her gün kullanıyorum. Yakın zamanda geçiş yaptım. macOS'ta caps lock'u cmd olarak eşleyince cmd+c de gayet iyi çalışıyor. Varsayılan ayarlar akıllıca seçilmiş ve özelleştirmenin çok kolay olmaması dışında her şeyden memnunum. Gruvbox light tema da çok hoş görünüyor. Zig ile yazılmış olması da başlı başına çok havalı; Zig'in gerçek kullanım için yeterince hazır olup olmadığını merak eden biri için ghostty bunun cevabı olabilir. Başka bir terminale geri dönecekmişim gibi görünmüyor; gerçekten çok memnunum. Not: ghostty'ye bir de aerospace eklenince Mac'te neredeyse kusursuz bir yalnızca klavye ortamı oluşuyor.

    • Neden ghostty kullanmam gerektiğini anlatabilir misin? (Ana terminal olarak Terminal.app kullanan biri olarak soruyorum.)
    • Clickhouse ve Bun da inanılmaz projeler.
  • Air Mac'imde ghostty kullanıyorum; abim kod yazarken kullandığı Mac'i bana vermişti. ghostty gerçekten çok iyi ve içtenlikle minnettarım. Küçük bir şey olabilir ama libc bağımlılığının olmaması nedense bana oldukça değerli geliyor.

  • visidata'nın frekans analizi histogramı düzgün render edilmiyordu; bazıları kare olarak doğru görünürken geri kalanı elmas içinde soru işareti olarak çıkıyordu. Bu sorun yüzünden hâlâ iTerm'i bırakamadım. Hangi anahtar kelimelerle arama yapmam gerektiğini bile bilmediğim için çözmek zor oldu.

    • Ana yazı tipinde ve yedek yazı tipinde ilgili codepoint'ler olmayabilir. ghostty kullanıcısıysan, iTerm2'de o glifin hangi fontla görüntülendiğini kontrol edip ghostty'de buna uygun bir ayar olup olmadığına bakmanı öneririm.
  • Ghostty'nin metin reflow'unu (özellikle scrollback dahil) Neovim tabanlı terminallerde de çözebilmesini umarak yakından takip ediyorum. Ghostty'nin terminal ortamına yeni bir yenilik dalgası getirmesi beni çok sevindiriyor. https://github.com/neovim/neovim/issues/33155

    • Sen neovim terminalinin yoğun bir kullanıcısı mısın diye merak ettim. Bir dönem tmux'un neovim'i çalıştırdığı akıştan çıkıp terminali doğrudan neovim'in yönetmesini sağlayacak şekilde iş akışımı değiştirmeyi denemiştim. Dosyaları tek bir buffer'da açabilmenin daha rahat olacağını düşünmüştüm. Çünkü bir dosyayı hangi pane'de açarsam açayım çoğu zaman başka bir neovim instance'ında zaten açık oluyordu. Testler sırasında libghostty'ye geçince çözülebilecek belirgin bir reflow sorunu yaşamadım; hatta asıl zorlayıcı olan paradigma değişimine alışmaktı. Neovim'in yerleşik terminaline gerçekten bağlı biri olarak, libghostty'nin neyi iyileştirebileceğine dair deneyimlerini duymak isterim.
  • ghostty'yi gerçekten kullanmak istiyorum ama cmd+f desteği olmadığı için henüz deneyemedim; yine de bu projenin gelişimini büyük bir heyecanla izliyorum.

    • Yol haritasında var.
      https://ghostty.org/docs/install/release-notes/1-2-0#roadmap
    • cmd+shift+f gibi bir kısayolla tüm buffer'ı varsayılan metin düzenleyicide açıp orada arama yapabiliyorsun. Birçok kişi bununla idare etti, ben de öyle; yerleşik scrollback araması gelene kadar oldukça pratik bir geçici çözüm.
    • Bu özelliğin neden başta eklenmediğini merak ediyorum; terminalde geçmiş araması temel bir ihtiyaç değil mi, yoksa işi zorlaştıran özel bir neden mi vardı? Hatta Mitchell'ın kendisi de 2 yıl önce bu konuda bir issue açmıştı.
      https://github.com/ghostty-org/ghostty/issues/189
    • Birçok kişi cmd+f gibi geçmiş arama özelliği olmadığı için şikâyet ediyor ama ben, mümkün olsa bile, bunu bir kez bile kullanmış değilim. Nasıl bir iş akışı denediğini anlatabilirsen sevinirim; acaba önemli bir şeyi mi kaçırıyorum diye merak ediyorum.
    • İçeride tmux çalıştırıp cmd+f'yi copy-mode + / olarak eşlemek de mümkün.