Tek JavaScript çekirdeği, iki çalışma ortamı: Node.js ve Bare'de test
Havenfold ekibi ·
Bare, Holepunch'ın uygulamaların içine gömülmek ve dizüstü kadar telefonda da çalışmak için yaptığı küçük bir JavaScript çalışma ortamıdır; Node.js ise sunucu ve masaüstü için bilinen çalışma ortamıdır. Aynı JavaScript çekirdeği hem bir telefon uygulamasının içinde hem bir ev sunucusunda çalışacaksa, çalıştığını bilmenin dürüst yolu testlerini iki ortamda da koşmak ve bulunan farkları gerçek bulgu olarak ele almaktır.
Bu yazı Bare'in ne olduğunu, tek bir çekirdeğin neden önemli olduğunu, Havenfold'un çekirdek paketlerini Node.js ve Bare'de nasıl test ettiğini ve iki ortamlı testin ortaya çıkardığı somut bir farkı anlatıyor. Havenfold pre-alpha aşamasında: gerçek verinizle kullanmayın.
Bare nedir?
Bare'in kendi README'si onu masaüstü ve mobil için küçük ve modüler bir JavaScript çalışma ortamı olarak tanımlıyor. Node.js gibi eşzamansız, olay güdümlü bir yapısı var. Node.js'ten farkı, gömülmeyi ve cihazlar arası desteği temel kullanım saymak; hedefi telefonda da dizüstündeki kadar iyi çalışmak. V8'e bağlantı sağlayan libjs ve olay döngüsü için libuv üzerine kurulu, üstüne yalnız birkaç parça ekliyor.
Bu, telefonun ince bir istemci değil tam bir katılımcı olduğu eşler arası uygulamalar için doğal bir seçim.
Neden iki değil tek bir çekirdek?
Telefonla sunucu arasında eşitleme yapan uygulamalarda sık görülen düzen iki ayrı uygulamadır: biri mobil dilde, biri sunucuda. O zaman her protokol değişikliği iki kez yapılmak zorunda kalır ve iki uygulama, ancak canlıda ortaya çıkan ince biçimlerde birbirinden ayrışabilir.
Havenfold'un tasarım ilkeleri bunu açıkça reddediyor. H2 ilkesi "tek protokol, tek çekirdek": telefonlar, kutular, işçiler ve donanım aynı çekirdeği çalıştırır; ikinci bir uygulama yoktur. Telefonlarda çekirdek bir Bare worklet'inin içinde, ev kutusunda ve işçilerde ise bir düğüm servisi olarak çalışıyor.
İki ortamlı test nasıl işliyor?
README'nin geliştirici bölümü bunu anlatıyor: çekirdek paketleri hem Node.js'te hem Bare'de test ediliyor; Bare bir geliştirme bağımlılığı olarak geliyor, ayrıca bir şey kurmak gerekmiyor. npm test, CI'ın çalıştırdığı denetim betiğinin aynısını çalıştırıyor:
- her paketin testleri Node.js'te;
- çekirdek paketleri ve SDK bir kez de Bare'de;
- kurulum ve servis testleri;
- protokol test vektörlerinin bağımsız olarak yeniden üretilmesi;
- lisans başlığı ve bağımlılık lisansı denetimleri, türetme etiketi denetimleri ve kritik modüller için kapsama eşikleri;
- telefon paketinin kendi denetimleri ve kısa bir bulanık test (fuzzing).
Aynı testlerin iki ortamda koşması, tek başına hiçbirinin yakalayamayacağı bir hata türünü yakalar: sessizce yalnız Node.js'te olan bir modüle dayanan kod, iki ortamın standart kütüphaneleri arasındaki davranış farkı ya da bir olay döngüsünde tutan ama öbüründe tutmayan zamanlama.
Küçük, adı konmuş uyumluluk katmanları
Bazen bir bağımlılık yalnız Node.js'in sağladığı bir şey bekler. Depodaki cevap bir çatal değil, küçük ve adı konmuş bir katman. Örneğin README core/vault/bare-crypto için "bir kasa bağımlılığı Bare'de de çalışsın diye küçük bir crypto uyumluluk katmanı" diyor. Bu katmanları küçük ve görünür tutmak, incelemeyi ve bağımlılık artık ihtiyaç duymadığında silmeyi kolaylaştırıyor.
Testin bulduğu gerçek bir fark
Havenfold'un denetim paketi bilinen sınırları açıkça listeliyor ve bunlardan biri doğrudan Bare'de çalıştırmaktan çıkıyor. Sınırlar belgesine göre Bare, iptal edilen zamanlayıcıları ancak olay döngüsü dönünce bırakıyor; döngünün dönmesine izin vermeden çok sayıda girdi veren bir bulanık testte bu, görünürde bir bellek büyümesi olarak ortaya çıktı. Test düzeneği artık döngünün düzenli olarak dönmesine izin veriyor. Belge kapsam konusunda dikkatli: ürünün taşıyıcı ve tören zamanlayıcılarına etkisi ölçülmedi.
İki ortamlı test tam bu tür bulgular için var. Bir çökme ya da bir manşet değil; çekirdek tek ortamda test edilseydi kolayca gözden kaçacak bir davranış farkı.
Bugün nerede duruyor?
- Kutu ve işçilerde bugün Node.js: Düğüm yazılımının çekirdekleri bugün Node.js'te çalışıyor; Bare'de çalıştırılmaları planlanıyor. Telefonlarda çekirdek Bare'de çalışıyor.
- Node.js sürümü: README Node.js 22 istiyor; CI yalnız 22'yi test ediyor ve bazı adımlar bugün 24'te başarısız oluyor.
- Pre-alpha: İki ortamda test güçlü bir alışkanlık, kanıt değil. Havenfold gerçek bir evde çalışmadı ve bağımsız bir güvenlik denetiminden geçmedi.
Özet
- Bare, Holepunch'ın telefon ve masaüstü için küçük, gömülebilir JavaScript çalışma ortamı; Node.js bilinen sunucu ortamı.
- Havenfold'un "tek protokol, tek çekirdek" ilkesi, telefonların, kutuların ve işçilerin ikinci bir uygulama olmadan aynı çekirdeği çalıştırması demek.
- Her paketin testleri Node.js'te, çekirdek paketleri ve SDK bir kez de Bare'de, CI'ın kullandığı aynı denetimle koşuyor.
- Küçük, adı konmuş uyumluluk katmanları boşlukları kapatıyor; iki ortamlı test gerçek bir zamanlayıcı farkını ortaya çıkardı ve bu artık bilinen bir sınır olarak yazılı.
- Havenfold pre-alpha aşamasında ve gerçek veri için değil.
Havenfold pre-alpha aşamasında: gerçek verilerle kullanmayın. Henüz gerçek bir evde çalışmadı ve bağımsız bir güvenlik denetiminden geçmedi.
Kaynaklar