js-dos, DOS oyunlarını ve uygulamalarını web tarayıcısında çalıştıran, DOSBox tabanlı bir emülatör ön yüzüdür. DOSBox ve DOSBox-X emülatörlerinin WebAssembly derlemelerini bir oynatıcı arayüzü, paket biçimi ve JavaScript API’siyle birleştirir; böylece DOS yazılımı sunucuda değil, ziyaretçinin tarayıcısında çalışır.
İlk bölümler js-dos’un nasıl çalıştığını ve js-dos 8 ile bir sayfaya nasıl yerleştirildiğini gösteriyor; sonraki bölümler .jsdos paket biçimini, performans ve uyumluluğu, kayıt ve ağ desteğini, alternatifleri ve telif sınırlarını kapsıyor. Bilgiler Ekim 2026 itibarıyla güncel sürüm olan js-dos 8.5.3’e göredir.
Emülasyon nedir, js-dos ne yapar?
Simülasyon bir sistemin davranışını taklit eder; emülasyon ise o sistemin donanımını yeniden üretir ve özgün programın makine kodunu değiştirmeden çalıştırır. js-dos emülasyon yapar: x86 işlemciyi, VGA ekran kartını, Sound Blaster ses kartını, klavye ve fare denetleyicilerini DOSBox üzerinden emüle eder. Bu yüzden DOS dönemine ait bir .EXE dosyası yeniden derlenmeden çalışır.
DOS programları dosya, ekran ve bellek işlemleri için int 21h gibi yazılım kesmeleriyle DOS servislerini çağırır; bu, modern işletim sistemlerindeki sistem çağrılarının karşılığıdır. DOSBox bu servisleri kendi yerleşik, MS-DOS uyumlu DOS katmanıyla karşılar; ayrıca bir MS-DOS kopyası gerekmez.
WebAssembly ile tarayıcıya taşımak
js-dos, DOSBox’ı JavaScript’te yeniden yazmaz. DOSBox ve DOSBox-X’in C++ kaynak kodu Emscripten araç zinciriyle WebAssembly’ye (WASM) derlenir; js-dos bu derlemelerin üzerine oynatıcı arayüzünü ve API’yi ekler. js-dos 8.4 sürümünde derleme araçları Emscripten SDK 5.0.2’ye güncellendi. Proje, WebAssembly’nin yanında saf JavaScript derlemesi de sunar.
Katmanlar kabaca şöyledir:
- Emülatör çekirdeği: DOSBox ya da DOSBox-X; işlemci, grafik, ses ve giriş aygıtları ile yerleşik DOS.
- Tarayıcı entegrasyonu: Görüntü canvas’a çizilir, ses Web Audio API ile çalınır; klavye ve fare girdileri emülatöre aktarılır. js-dos 8.4 ile 3Dfx hızlandırması WebGL tabanlı bir çiziciyle desteklenir.
- Dosya sistemi:
.jsdospaketinin içeriği emülatörün sanal diskine yerleştirilir ve DOS tarafında bir sürücü olarak görünür.
js-dos 8 ile sayfaya yerleştirme
Resmî başlangıç örneği, stil ve betik dosyasını <head> içinde yükler, Dos() çağrısını da <body>’nin sonunda yapar:
<!doctype html>
<html lang="tr">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>js-dos örneği</title>
<style>
html,
body {
height: 100%;
}
</style>
<link rel="stylesheet" href="https://v8.js-dos.com/latest/js-dos.css" />
<script src="https://v8.js-dos.com/latest/js-dos.js"></script>
</head>
<body>
<div id="dos" style="width: 100%; height: 100%"></div>
<script>
// Emülatörü #dos öğesine yerleştirip paketi yükler
Dos(document.getElementById("dos"), {
url: "https://v8.js-dos.com/bundles/digger.jsdos",
});
</script>
</body>
</html>
Sayfa bir HTTP sunucusu üzerinden açılmalıdır; file:// ile doğrudan açıldığında çalışmaz. Yerel deneme için herhangi bir statik dosya sunucusu yeterlidir. Emülasyon tamamen tarayıcıda yürüdüğü için sunucu tarafında çalışan bir uygulama gerekmez; sunucunun işi yalnız betikleri, WASM dosyalarını ve paketi statik dosya olarak vermektir. Bu, sayfayı sunucu tarafında üreten uygulamalardan farklı olarak her şeyin istemcide yürüdüğü bir modeldir.
latest adresi her zaman en yeni sürümü yükler. Üretimde, yeni bir sürümün davranış değişikliğinden etkilenmemek için npm’deki js-dos paketinden belirli bir sürümü kendi sunucunuzdan sunmak daha güvenlidir.
.jsdos paket biçimi
.jsdos dosyası, oyun dosyalarını ve js-dos yapılandırmasını içeren bir ZIP arşividir. Resmî digger.jsdos paketinin içeriği şöyledir:
.jsdos/dosbox.conf # zorunlu DOSBox yapılandırması
.jsdos/readme.txt
DIGGER.COM # oyunun kendisi
.jsdos/dosbox.conf zorunludur; bu dosya olmadan js-dos başlamaz. Standart bir DOSBox yapılandırma dosyasıdır ve oyunun otomatik başlatılması AUTOEXEC.BAT ile değil, bu dosyanın [autoexec] bölümüyle yapılır. Resmî paketteki ilgili bölümler kısaltılmış olarak şöyledir:
[cpu]
core=auto
cputype=auto
cycles=fixed 800
[autoexec]
mount c .
c:
DIGGER.COM
[autoexec] altındaki satırlar DOSBox açılır açılmaz sırayla çalışır: paketin kökü C: sürücüsüne bağlanır, sürücüye geçilir ve oyun başlatılır. İsteğe bağlı .jsdos/jsdos.json dosyası ise DOSBox yapılandırmasında karşılığı olmayan ayarları (örneğin dokunmatik ekran için sanal kontroller) tutar. Paketi elle hazırlamak yerine js-dos’un web tabanlı Game Studio aracı da kullanılabilir.
Performans
Performansı en çok emüle edilen işlemci hızı, yani DOSBox’ın cycles ayarı belirler. cycles=auto çoğu oyun için iyi bir başlangıçtır; zamanlamaya duyarlı oyunlarda yukarıdaki örnekteki gibi sabit bir değer (cycles=fixed 800) gerekebilir. Değer, cihazın gerçek zamanlı emüle edebileceğinden yüksek seçilirse ses kesilir ya da görüntü takılır.
Tipik bir DOS oyununda darboğaz grafik işlemcisi değil, işlemci emülasyonudur. Gerçek hız; ziyaretçinin cihazına, tarayıcısına ve oyuna göre değiştiği için her paketi hedeflenen cihazlarda denemek gerekir. js-dos 8.4 ile gelen turbo paneli işlemci ölçümlerini, hızı ve cycles değerini çalışma anında gösterip ayarlamaya, ileri sarmaya ve kare atlamaya izin verir.
Uyumluluk
DOSBox, gerçek modda çalışan programların yanı sıra DOS/4GW gibi DOS genişleticilerini (DOS extender) kullanan korumalı mod oyunlarını da çalıştırır; Doom bu gruptaki bilinen bir örnektir. Sorunlar genellikle oyuna özgüdür; özellikle zamanlamaya duyarlı oyunlar paket bazında cycles ya da ses kartı ayarı gerektirebilir.
Windows 95 ve 98 gerektiren yazılımlar için js-dos, DOSBox-X arka ucunu ve hazır Windows 9x sistem imajlarını destekler. Windows disk imajları DOS oyunlarından çok daha büyük olduğundan js-dos, büyük imajları sockdrive özelliğiyle bütünüyle indirmeden parça parça akıtabilir.
Mobil cihazlar
js-dos dokunmatik ekranlar için sanal kontroller sunar; bu kontrollerin düzeni .jsdos/jsdos.json içinde tanımlanır. Projenin kendi açıklamasına göre js-dos 8’de mobil destek hâlâ geliştirme aşamasındadır; mobilde üretim düzeyindeki seri 7.x’tir. Mobil hedefleniyorsa her paket gerçek cihazlarda denenmelidir.
Kayıt ve kalıcı durum
js-dos 8.4 ile paketler ve oyunun dosya sisteminde yaptığı değişiklikler tarayıcının Origin Private File System (OPFS) alanında saklanır; önceki IndexedDB depolaması ile hesap ve bulut kodu bu sürümde kaldırıldı. Oyun kendi kayıt dosyasını diske yazdığında bu değişiklik yerel olarak korunur. Kayıtları kendi sunucunuzda tutmak isterseniz js-dos’un fsChanges kancaları kullanılabilir. DOSBox-X arka ucunda ayrıca F6 ve F7 tuşlarıyla hızlı kaydetme ve yükleme vardır.
Tarayıcı depolaması kalıcı bir yedek değildir: kullanıcı site verilerini temizlerse ya da tarayıcı depolama alanını boşaltırsa yerel kayıtlar silinir.
Ağ üzerinden çok oyunculu oyun
js-dos’un belgelediği ağ desteği, DOS döneminin yerel ağ protokolü IPX’tir. js-dos 8.4.0 (19 Haziran 2026) ile ağ katmanı HumbleNet’ten WebRTC-NET’e taşındı. Bir oyuncu startIpxServer seçeneğiyle IPX sunucusu başlatır, diğerleri connectIpxAddress ile bu sunucuya bağlanır.
Tarayıcılar önce bir sinyal sunucusu (peer server) üzerinden birbirini bulur; oyun trafiği ardından WebRTC veri kanallarıyla doğrudan eşler arasında akar. NAT ya da güvenlik duvarı doğrudan bağlantıyı engellerse trafik bir TURN sunucusu üzerinden aktarılır. Resmî belge, internet üzerinden oyun için kendi sinyal sunucunuzu (peer-server) ve coturn gibi bir TURN sunucusunu kurmayı anlatır. Gecikme, eşler arasındaki ağ koşullarına bağlıdır.
Alternatifler
- EM-DOSBox: DOSBox’ın Emscripten portudur. Internet Archive’ın tarayıcıda çalışan MS-DOS koleksiyonu js-dos değil, Emularity yükleyicisiyle birlikte EM-DOSBox kullanır.
- v86: DOSBox gibi DOS’a odaklanmaz; x86 uyumlu bir bilgisayarı bütünüyle emüle eder ve performans için makine kodunu çalışma anında WebAssembly modüllerine çevirir. Tam bir bilgisayar emüle ettiği için tarayıcıda Linux gibi bir işletim sistemini de açabilir; karşılığında tek bir DOS oyununu yayımlamak için kurulumu daha ayrıntılıdır.
Telif ve lisans
js-dos teknik olarak her DOS programını çalıştırabilir, ama bir oyunu herkese açık bir sayfada sunmak onu dağıtmak anlamına gelir. Yalnız hakları size ait olan, lisansı dağıtıma izin veren (örneğin yayıncısının ücretsiz dağıtıma açtığı sürümler) ya da hak sahibinden izin aldığınız yazılımları yayımlayın. js-dos’un kendi GPL-2.0 lisansı yalnız emülatörü kapsar; çalıştırılan oyunlara herhangi bir dağıtım hakkı vermez. “Abandonware” olarak anılan, artık satılmayan oyunlar kendiliğinden serbest değildir; telif hakkı genellikle hâlâ sürmektedir.
Sonuç
js-dos, DOS yazılımlarını kurulum gerektirmeden bir web sayfasında çalıştırmanın pratik bir yoludur; eski bir oyunu, eğitim amaçlı bir programı ya da yazılım tarihine ait bir uygulamayı tanıtmak için uygundur. Ancak performans, giriş gecikmesi, mobil uyumluluk ve kayıtların kalıcılığı her paket için ayrıca doğrulanmalıdır; dağıtım hakkı olmayan yazılımlar için ise doğru araç değildir.