Perde arkası
Veritabanı dosya sisteminin yerini alır
Bilimsel araçların çoğu bir dosya sisteminde yaşar: bir kurulum dizini, paketlerle dolu bir ortam, tam sürümünü kimsenin hatırlamadığı betiklerle dolu bir klasör. Scellis bu katmanı ortadan kaldırır. Kurulum dizini yoktur — her blok, op, kernel, model, iş akışı ve görüntüleyici, çalışma zamanında bir veritabanından sunulan ve makinenizde önbelleğe alınan bir katalog varlığıdır. Bu makale o omurgayı ve tek teslim yolunun, hash kimliğinin ve doğruluk ile teslimat arasındaki katı ayrımın işi neden kalıcı ve paylaşılabilir kıldığını anlatır. Motor onu okur; başka hiçbir şey okumaz.
Tek kaynak, tek yol#
Çalışma zamanında her katalog varlığı yalnızca veritabanından getirilir — tarayıcınızda yerel veritabanı, platformda bulut veritabanı. Derlenmiş uygulama hiçbir katalog paketlemez: statik JSON yok, gömülü blok listesi yok, uygulama paketinde sessizce eskiyen bir dosya yedeği yok. Kullanabildiğiniz her şey veritabanından geçerek geldi. Bu katılık işin özüdür: İki doğruluk kaynağı her zaman birbirinden uzaklaşır ve “şu anda hangi kopyayı çalıştırıyorum?” sorusu, bilimsel çalışmanın kaldırabileceği bir soru değildir. Tek yol şu anlama da gelir: Her varlık — yerleşik ya da kullanıcı yapımı — size ulaşırken aynı görünürlük, güven ve eşitleme mekanizmasından geçer; yeni yayımlanan içeriğin uygulama güncellemesi olmadan çalışan bir oturuma anında takılabilmesinin nedeni budur.
Dört kavramsal katman#
Altında omurga dört katmandır; her birinin farklı bir değişebilirlik kuralı vardır. Bir kez yazılan Objects, bir içerik hash'i altında saklanan büyük değişmez baytlardır. Değiştirilebilir References, nesnelere işaret eden insan-yüzlü adlardır — “bu iş akışının güncel sürümü.” Yalnızca-eklenen Events, eşitleme günlüğüdür: Hiçbir şey yeniden yazılmaz, yalnızca eklenir. Ve Derived görünümler — arama dizinleri, katalog listeleri — her an atılıp yeniden hesaplanabilen, yeniden türetilebilir izdüşümlerdir. Bir şeyin hangi katmanda yaşadığını bilmek, onda neyin değişebileceğini ve neyin asla değişemeyeceğini tam olarak söyler.
Kimlik bir hash'tir#
Nesne katmanı içerik adreslidir. Büyük ve değişmez baytlar — ağırlıklar, veri kümeleri, derlenmiş implementasyonlar — içeriklerinin SHA-256 hash'i altında saklanır ve bir hash'in altındaki baytlar asla değişmez. Doğrulamayı geçemeyen önbellekteki bir blob eskimiş sayılmaz; bozulma sayılır ve yeniden getirilir. Bu nesnelerin çevresinde, yayımlanmış varlıklar sürüm başına değişmezdir: Anlamsal bir değişiklik yeni bir sürümdür ve sürümler bir arada yaşar.
{
"block_id": "user/normalize",
"version": 2,
"spec_hash": "3f61c0a94b7e58d2…" // the machine's name for the bytes
}Bir varlık için iki ad#
Bir katalog satırı, bir varlığı iki kez adlandırır: bir kez insanlar için (kimlik artı sürüm), bir kez de makineler için (içeriğinin hash'i). Ad bulmak içindir; makinenin güvendiği şey hash'tir. İkisi birlikte sert bir söz verir: Üzerine inşa ettiğiniz hiçbir şey altınızdan yeniden yazılamaz. Bağımlı olduğunuz bir bloğu biri iyileştirdiğinde bu, yeni bir sürüm olarak gelir — sizin sabitlediğiniz sürüm, her zaman çözüldüğü baytlara çözülmeye devam eder. Bir çalıştırmayı yeniden üretilebilir kılan da aynı hash kimliğidir.
Doğruluk Git'te; veritabanı teslimattır#
Yerleşik katalog için doğruluk kaynağı veritabanı bile değildir — spesifikasyonlarla dolu bir Git deposudur. Bir teslim hattı bu spesifikasyonları okur, implementasyonları içerik adresli bloblara derler ve satırlarla nesneleri veritabanına yazar; hem de idempotent biçimde: İki kez çalıştırırsanız aynı durumu elde edersiniz. Yerleşik içerik için veritabanı saf teslimattır — asla ikinci bir yazar değil. Bu ayrım kurtarmayı sıkıcı kılar — yerleşik katalog her zaman Git'ten, tıpatıp yeniden kurulabilir — ve platformu eşitlik konusunda dürüst tutar: Veritabanından itibaren yerleşik içerik, bir kullanıcının yayımladığı her şeyle aynı yoldan gider. Tek katalog, tek yol; ayrıcalıklı bir yan kapı yok.
Talep üzerine, asla toptan değil#
Katalog, bir milyonu aşkın kullanıcı yapımı varlığın ötesine büyüyecek şekilde tasarlanmıştır; bu yüzden model “her şeyi indir” olamaz. Makinenizde yaşayanlar bilinçli olarak iki kademeye ayrılır:
- Yerelliği garantili: motor artı kullandığınız, kurduğunuz ya da sabitlediğiniz her şey — kayıtlı her iş akışının ve modelin tam geçişli kapanışı dahil. Hash ile doğrulanmış, kalıcı ve ağ bağlantısı olmadan sonsuza dek çalıştırılabilir.
- Keşif: küresel kataloğun geri kalanı. Onda gezinmek ve arama yapmak — Marketplace'te — ağ ister; tekil varlıklar, ihtiyaç duyduğunuz anda talep üzerine getirilir.
İçeriği yükselten şey kullanımdır: Bir şeyi açmak, çalıştırmak, çatallamak ya da kurmak, onu — bağımlı olduğu her şeyle birlikte — yerel çalışma kümenize çeker. Bir iş akışı kaydedilmeden önce tam kapanışının yerelde olduğu garanti edilir; kayıtlı bir iş akışının her zaman çevrimdışı çalışmasının nedeni budur. Talep üzerine getirme, gezinme ve yazarlık zamanıyla sınırlıdır; asla çalıştırma yolunun üzerinde durmaz. Yerel ayak iziniz, küresel kataloğun büyüklüğüyle değil, kendi etkinliğinizle sınırlıdır.
Arka planda eşitlenen çevrimdışı öncelikli yazmalar#
Okumalar yerel veritabanından gelir; yazmalar da öyle. Her değişiklik önce iyimser biçimde yerel deponuza uygulanır ve arka planda bir eşitleme kuyruğu üzerinden platforma gönderilir — çalışmaya devam etmek için asla bir gidiş-dönüş beklemezsiniz. İki kişi aynı paylaşılan varlığı değiştirdiğinde, çatışma açıkça yüzeye çıkar ve sunucuyu-kabul, rebase ya da birleştirme seçeneği sunar. Paylaşılan içerikte sessiz son-yazan-kazanır bir kolaylık değil, bir anti-desen sayılır: Platform, birinin düzenlemesini sessizce atmaktansa sormayı yeğler.
Bir kez açılış, sonra süresiz çevrimdışı#
İlk ziyaretiniz, ağın gerektiği tek andır: Birkaç saniyelik bir açılış, yerel veritabanını asgari bir çalışma kümesiyle doldurur — motor, kendi ve kurulu içeriğiniz ve açtığınız her şeyin kapanışı. O andan itibaren sahip olduğunuz her şey tamamen çevrimdışı çalışır — süresiz. Bu, kısıtlanmış bir çevrimdışı kip değildir; her zaman okuduğu yerel veritabanını okuyan aynı motordur. Yalnızca yeni küresel içeriğin keşfi bağlantı ister ve çevrimdışı arama bunu açıkça söyler: Zaten sahip olduklarınızın, bayatlığı net biçimde etiketlenmiş bir dizinine geriler.
Not
Başarısızlık bilerek yüksek seslidir. Bağımlılıklarını hiç getirmediğiniz bir iş akışını çevrimdışı açmak, eksik içeriğin tam listesiyle başarısız olur — asla bir düğümü sessizce atlayarak ya da “en yakın” bir sürümü yerine koyarak değil.
Taslak üzerinde birlikte çalışırsınız; bir commit'e atıf verirsiniz#
Paylaşım doğrudan hash kimliğinin üzerinde yol alır. Paylaşılan bir bağlantı, bir commit'in içerik adresli yapıtlarını adlandırır — programı, ağırlıkları, veri kümesini —; bu yüzden nerede açılırsa açılsın, tıpatıp aynı baytlara çözülür ve varışta hash ile doğrulanır. Burada URL ile yeniden üretilebilir tam olarak bu demektir: Yapıtların kendisi her yerde aynıdır. Son parça bilinçli bir tercihtir — canlı bir ortak çalışma oturumu asla hash'lenmez. Siz başkalarıyla düzenlerken taslak hareketli bir şeydir; öyle değilmiş gibi davranmak, ona işaret eden her bağlantıyı zehirlerdi. İş atıf vermeye değdiğinde onu commit edersiniz ve bağlantının çözüldüğü şey, o değişmez yapıttır. Bir taslak üzerinde birlikte çalışırsınız; bir commit'e atıf verirsiniz — Scellis'te bir atıf asla hareketli bir hedefe işaret etmez.