« Tüm yayınlar

mirrord Artık Windows'ta Tamamen Native Çalışıyor

mirrord, WSL bağımlılığını kaldırarak Windows'ta native çalışacak şekilde yeniden tasarlandı. LD_PRELOAD'suz DLL enjeksiyonu ve IDE entegrasyonları anlatılıyor.

mirrord, Kubernetes cluster'ı içinde yerel süreçleri çalıştırmayı sağlayan bir geliştirici aracı olarak, uzun süre Windows kullanıcıları için WSL üzerinden çalışıyordu. Bu çözüm işlevsel olsa da ek bir ortam kurulumu, senkronizasyon yükü ve tam parite eksikliği gibi sorunlar getiriyordu. Ekip bu nedenle aracı doğrudan Windows üzerinde native çalışacak şekilde yeniden inşa etti.

Asıl zorluk, mirrord-layer bileşeninin sürece nasıl enjekte edildiğiyle ilgiliydi. Unix sistemlerde LD_PRELOAD ve DYLD_INSERT_LIBRARIES gibi mekanizmalar bu işi tek bir ortam değişkeniyle çözerken, Windows'ta böyle bir karşılık bulunmuyor. Bunun yerine süreç askıya alınmış halde başlatılıp mirrord-layer DLL'i ayrı bir thread üzerinden enjekte ediliyor, hazır olduğunda bir Windows named event ile sinyal veriliyor ve ancak o zaman ana thread devam ettiriliyor. Alt süreçler için ise CreateProcessInternalW fonksiyonu hook'lanarak tüm süreç oluşturma API'leri tek noktadan yakalanıyor.

En karmaşık kısım IDE eklentileri oldu. VS Code, süreç kullanıcı kodu çalışmadan önce durdurulabildiği için nispeten kolay şekilde native destek kazandı. JetBrains tarafında ise gerçek java.exe'nin yerine mirrord'u koyan bir 'sahte JDK' hilesi, Gradle çalıştırmaları için özel bir init script'i ve debug senaryoları için JDWP portu üzerinden süreç eşleştirme gibi platforma özgü çözümler geliştirildi. Rider ve .NET tarafında da benzer bir mantıkla komut satırı yeniden yazılarak entegrasyon sağlandı.

Bu çalışma, mühendisler için düşük seviye işletim sistemi farklarının araç geliştirmeyi ne kadar karmaşıklaştırabileceğini somut biçimde gösteriyor. Windows'ta tek bir enjeksiyon mekanizmasının olmayışı, her senaryo için ayrı ayrı çözüm gerektirmiş ve bu da mirrord ekibinin IDE içi hata ayıklama, süreç yönetimi ve alt süreç enjeksiyonu gibi konularda derinlemesine platform bilgisi edinmesini zorunlu kılmış.

» KaynakHashnode #20