Download README.md from HelloSun/dosmqtt: direct link, hf CLI and curl.
- Browser
- Download file 3.25 kB
-
https://huggingface.co/spaces/HelloSun/dosmqtt/resolve/main/README.md
- Command line
-
hf download hf://spaces/HelloSun/dosmqtt/README.md
-
curl -L -o README.md https://huggingface.co/spaces/HelloSun/dosmqtt/resolve/main/README.md
title: DOS MQTT LAB
emoji: 🖥️
colorFrom: green
colorTo: blue
sdk: static
pinned: false
DOS MQTT LAB — DOS programs that really go online
Two FreeDOS machines run in the page (v86 x86 emulator). Each has an emulated NE2000 network card. Inside DOS:
- the Crynwr NE2000 packet driver is loaded,
- mTCP's DHCP.EXE obtains an address (192.168.86.100),
- A.EXE (listener) and B.EXE (sender) are real DOS programs, built with Open Watcom against the mTCP TCP/IP stack. They do their own DNS lookup, TCP handshake and speak MQTT 3.1.1.
| Program | Behaviour |
|---|---|
A.EXE |
Connects, subscribes to the shared topic, and prints each received message. One second later it prints an echo line. |
B.EXE |
Run once: connects, publishes Hello from DOS B at HH:MM:SS (DOS clock), disconnects, exits. |
The page types A into machine A once and types B into machine B every 5 seconds (DOS has no scheduler). Both DOS screens and an observation log show whether A received what B sent.
How the packets reach a public broker
Browsers cannot open raw TCP sockets, and Hugging Face static Spaces have no server. v86 terminates the guest's TCP streams; bridge.js plays a tiny in-page WISP server that relays every stream the guest opens on port 1883 to a public broker's MQTT-over-WebSocket (WSS) endpoint. MQTT is identical on both transports, so the bytes DOS writes are exactly what the broker receives. DNS goes through DNS-over-HTTPS (Cloudflare) via v86.
So the DOS side is genuine TCP/IP; only the last hop (browser → broker) is a WebSocket.
Things to know
- Default broker is
wss://broker.emqx.io:8084/mqtt. Public brokers vary: in our testsbroker.hivemq.comoften took ~10 s to answer a CONNECT (or never did), while EMQX andtest.mosquitto.organswered every time. Pick another from the list if one misbehaves. - "Background" A is a separate DOS machine, because DOS itself is single-tasking.
- The DOS clock is UTC.
- Both machines are on isolated virtual networks, so they can both use 192.168.86.100.
- If a B run has not finished when the next 5-second tick arrives, that tick is skipped and logged.
- Copy the topic to another tab or device to see messages travel between separate browsers.
- The page needs a modern browser (WebAssembly,
DecompressionStream).
Sources and licenses
See LICENSE, NOTICE.md and src/ (DOS program sources, build scripts, boot-disk scripts). GPL-3.0-or-later.
DOS × Gradio (gradio.html)
G.EXE is a third DOS program: it sends a question to a public Gradio Space (default tencent/Hy3) with plain HTTP through the same emulated NE2000/mTCP stack, reads the streamed answer and prints it. The page forwards the plain HTTP as HTTPS, but only to *.hf.space paths starting with /gradio_api/, and checks that the answer shown on the DOS screen equals the one Gradio returned. Use English (DOS shows ASCII). Open gradio.html.
Developer package
dev/dosmqtt-dev.zip holds the sources, build scripts, tests and the developer handover (dev/HANDOFF.md). It also contains the mTCP source archive that A.EXE / B.EXE are linked against. Rebuild everything with tools/build_all.sh.