{"id":37976437,"url":"https://github.com/someodd/gasm","last_synced_at":"2026-01-22T11:01:44.191Z","repository":{"id":332862170,"uuid":"1135271540","full_name":"someodd/gasm","owner":"someodd","description":"bare-metal i386 Gopher server for Linux","archived":false,"fork":false,"pushed_at":"2026-01-15T22:24:14.000Z","size":7,"stargazers_count":35,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-01-19T13:53:41.836Z","etag":null,"topics":["assembly","gopher","i386","minimalism","retrocomputing","systems-programming","x86"],"latest_commit_sha":null,"homepage":"https://www.someodd.zip/phlog-mirror/gasm-tiny-gopher-runs-on-trash.gopher","language":"Assembly","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/someodd.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-15T21:47:55.000Z","updated_at":"2026-01-19T01:26:11.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/someodd/gasm","commit_stats":null,"previous_names":["someodd/gasm"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/someodd/gasm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/someodd%2Fgasm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/someodd%2Fgasm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/someodd%2Fgasm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/someodd%2Fgasm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/someodd","download_url":"https://codeload.github.com/someodd/gasm/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/someodd%2Fgasm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28599827,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T08:51:33.170Z","status":"ssl_error","status_checked_at":"2026-01-20T08:51:10.855Z","response_time":117,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["assembly","gopher","i386","minimalism","retrocomputing","systems-programming","x86"],"created_at":"2026-01-16T18:30:54.320Z","updated_at":"2026-01-20T09:00:46.972Z","avatar_url":"https://github.com/someodd.png","language":"Assembly","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gasm (Gopher in Assembly)\n\n**A bare-metal i386 Gopher server for Linux.**\n\n`gasm` is a dependency-free Gopher server written in pure x86 Assembly. It is designed to run on the most resource-constrained hardware imaginable—from a rusty 1990s 386DX to a modern potato.\n\nNo libc. No runtime. No dynamic allocation. Just pure `int 0x80` syscalls.\n\n[Download the binary.](https://github.com/someodd/gasm/releases).\n\n## ⚡ The Stats\n\n| Metric | GASM | Typical Web Server |\n| :--- | :--- | :--- |\n| **Binary Size** | **1.5 KB** | 50MB+ |\n| **RAM Usage** | **24 KB** | 100MB+ |\n| **Dependencies** | **0** | ∞ |\n| **Min CPU** | **Intel 386 (1985)** | Core i7 |\n\n## 🛠 Features\n\n* **Zero Runtime:** Runs natively on the bare metal of the OS.\n* **Static Memory:** Uses global buffers and page-aligned memory. No heap, no `malloc`, no leaks.\n* **Legacy Networking:** Uses the `socketcall` (syscall 102) interface for maximum compatibility with older Linux kernels (2.4+).\n* **Security:**\n    * Strict input size limiting (Buffer Overflow protection).\n    * Sanitizes path traversal (`..`).\n    * Runs as an unprivileged user (Port 7890).\n* **Protocol Support:**\n    * Dynamic Directory Listings (Type 1)\n    * Text Files (Type 0)\n    * Binaries / Images (Type 9)\n\n## 🦕 Hardware Support\n\nGASM targets the **i386** (IA-32) instruction set.\n\n* **Minimum:** Intel 80386DX, 4MB RAM, Linux 2.4.\n* **Maximum:** Any modern x86_64 CPU (runs natively via legacy mode).\n\n*Why Linux 2.4?* It introduced `getdents64`, allowing us to list directories efficiently in a single syscall. This prevents I/O thrashing on ancient, slow hard drives.\n\n## 🚀 Build \u0026 Run\n\n**Prerequisites:** `nasm` and `ld` (binutils).\n\n```bash\n# 1. Build (Cross-compiles 32-bit ELF on 64-bit systems)\nmake\n\n# 2. Setup content\nmkdir content\necho \"Hello from Assembly\" \u003e content/hello.txt\n\n# 3. Run\n./gasm content\n\n```\n\n**Test:**\n\n```bash\ncurl gopher://localhost:7890\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsomeodd%2Fgasm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsomeodd%2Fgasm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsomeodd%2Fgasm/lists"}