Terminal pencere değildir

Malt yapılandırılmış bir terminal platformu. Fikir, geleneksel bir terminal oturumunun ne kadar büyük bir bölümünün onu o anda çizen emülatöre ait olmasından duyduğum memnuniyetsizlikle başladı.

Normalde kabuk baytlar ve kontrol dizileri yazar, terminal emülatörü bunları yorumlar; anlamın büyük bölümü de sonradan bu akıştan yeniden kurulmak zorunda kalır.

Malt önemli durumu bir arka plan hizmetine taşıyor. Oturumlar, paneller, yerleşim, girdi yetkisi ve yapılandırılmış çıktı bu hizmete ait. Bir metin arayüzü, web istemcisi, başka bir grafik istemci ya da otomasyon aracı; kabuk çalıştıran ayrı küçük dünyalar olmak yerine aynı oturuma açılan farklı pencereler olabiliyor.

Benim önemsediğim tersine çevirme bu. Projenin geri kalanının çoğu buradan çıkıyor.

Büyüdü

Son saydığımda kod deposunda 19 Rust paketi ve bir SvelteKit web istemcisi vardı. mash adlı süreç içi bir POSIX kabuğu, arka plan hizmeti, oturum kalıcılığı, görüntüleyici, sıradan terminal programları için uyumluluk katmanı, HTTP ve MCP yüzeyleri, metin arayüzü, platform yalıtımı çalışmaları ve tek tek bakıldığında son derece makul görünen birkaç başka parça var.

İlginç bir sistem problemiyle yeterli yetişkin gözetimi olmadan baş başa kaldığımda neler olduğuna iyi bir örnek.

Arkasında yalnızca bir tasarım belgesi değil, gerçek yazılım var. Oturumlar kalıcı. Komutların geçmişi ve yaşam döngüsü olayları var. Bir komut çalışırken çıktı akabiliyor. Birden çok istemci açık girdi yetkisiyle aynı oturuma bağlanabiliyor. TUI, diğer bileşenlerin kullandığı tipli protokolü konuşuyor.

Ama henüz her gün kullanacağım tamamlanmış bir terminal de değil. Proje sayfasının aksini söylüyormuş gibi yapmasını istemiyorum.

Malt ve Vexil

Malt, bileşenler arası iletişim için VNP’yi, yani Vexil Native Protocol’ü kullanıyor. Mesajlar elle yazılmış veri yapıları yığını değil; tipli, şemayla tanımlanmış ve Vexil üzerinden kodlanmış durumda.

Bu da Malt’ı, Vexil’in gerçek bir sistemin yükü altında sınandığı yerlerden biri yapıyor. İki proje ayrı ama uygulamada birbirleriyle yakından ilişkili.

Çalışma biçimimi değiştiren kısım

İlk geliştirme yol haritası aşamalara ayrılmıştı. Düzenli görünüyordu ve projeyi sürekli yana doğru genişlemeye teşvik ediyordu.

Malt’a geri dönüp gerçekten neyin var olduğunu kontrol etmeye başladığımda, eksik bir özellikten daha utandırıcı bir hata türüyle tekrar tekrar karşılaştım: Kod var olabiliyor, testleri olabiliyor ve yine de üretimde onu çağıran hiçbir şey bulunmayabiliyordu. Yol haritasının yapılmasını söylediği birkaç şey zaten yapılmıştı. Yalnızca onları faydalı kılacak hiçbir şeye bağlı değillerdi.

Bu, projede çalışma biçimimi değiştirmeye zorladı. Eski aşama sırasını bıraktım; sistemi çalıştırmaya, özelliklerin gerçekten erişilebilir olduğunu kontrol etmeye ve kanıt kaydetmeye dayalı, doğruluğu öne alan bir iş listesine geçtim. Deponun AGENTS.md dosyası artık Malt üzerinde çalışan herkese, ilgili denetimleri yeniden çalıştırmadan durum iddialarına güvenmemesini söylüyor.

Bu kuralın bir bedeli ödenerek öğrenildi.

Çıkardığım ders planlamanın kötü olduğu değildi. Yeterince büyük bir proje; mimarinin, testlerin ve yol haritasının sağlıklı göründüğü ama kullanıcının izlediği yolda hâlâ bir boşluk bulunan, son derece ikna edici bir kâğıt gerçeklik yaratabiliyordu.

Artık buna çok daha şüpheyle yaklaşıyorum.

Nerede duruyor

Birincil desteklenen platform Windows; Linux da destekleniyor. Dürüstçe test edip hata ayıklayabileceğim bir makinem olmadığı için şu anda macOS desteği iddia etmiyorum.

Temel oturum, kabuk, kalıcılık, metin arayüzü, protokol, HTTP/MCP, geçmiş, akan çıktı ve çok istemcili kullanım parçaları gerçek. İlk fikrin yapılandırılmış çıktı tarafında hâlâ önemli işler var; ayrıca ilginç bir sistem projesiyle her gün terminalim olarak kullanmak isteyeceğim bir araç arasındaki sıradan kullanılabilirlik işleri de duruyor.

Malt, çalışma biçimimin iki tarafını da bu sitede en açık gösteren proje olabilir. Bir sistem fikrinin çok derinine inip şaşırtıcı miktarda parçasını yapabiliyorum. Sistemin, doğruluk ve bitirmenin sonunda kendiliğinden gerçekleşeceğini varsayamayacağım kadar büyümesine de izin verebiliyorum.

Bu hikâyenin iki tarafını da burada tutuyorum.