This demo has been superseded by Operating System Demo at Operating System Demo [Stable]
If you wish to use this demo, it is recommended to use the new version.
This demo is no longer being maintained due to a lack of support and a poor state of development.
This demo is incomplete and some of this information may not yet be true, or may not be true in the future.
What is this?
“BIOS Demo” is a demo I created to allow users to create, maintain and work on a custom, open-source operating system within Roblox, created entirely in Lua. This includes the default operating system “SwordOS”.
so, whats SwordOS?
SwordOS is the default operating system - it is always stored in the C: drive. It’s UI is designed to resemble older versions of Windows - with some design choices from Ubuntu.
It is intended as a base design on which many developers may use to get a general idea on how they might set up their OS.
THIS IS NOT AN EMULATOR. THIS IS A SIMULATOR.
Remember the “wine is not an emulator” acronym? The same applies here, an emulator implies it is acting as a real operating system within your system. BIOS demo is not, and due to limitations of Luau and the Roblox platform - can not be an emulator.
Update log
Current build: check cmd.exe_sys, type s_version
then press right alt.
v0.017 (30.2E.30.31.37 | released)
- Implemented new BSOD feature into Sword OS (Handler: C:\OS\Sword\Failure.lua, UI: C:\OS\UI\BSOD) [✓]
v0.018 (30.2E.30.31.38 | released)
- SaveDataAPI [✓]
- “Filesearch” release : converts
C:\Users\replicated\Programs
intogame.ReplicatedStorage['C:'].Users.replicated.Programs
, etc. Supportscd
(change dir) with the second argument. [✓]
v0.019 (30.2E.30.31.39 | semi-released)
- Increased BSOD functionality [✓]
- cmd.exe_sys [✓]
- SwordOS taskbar functional [25%]
- Taskbar UI in SwordOS [30%]
→ Sword Logo opens search and applications list [0%]
→ Applications [5%]
→ Date/time UI [50%]- Basic UI [✓]
- Advanced calendar UI [0%]
- SwordScript compiler v0.1 [✓]
- SwordScript lexical analysis [0%]
- Better memory saving features, such as hibernate, sleep, shutdown and restart options [20%]
- Topbar UI - similar to Ubuntu
FILE EXENSION SUPPORT ADDED:
- .exe_sys (system executable files - these have complete access to SwordOS, and thus have high security, they can’t be created or destroyed - file permission is either dynamic or constant and set by OS developer (user/admin/kernel)) [40%]
- .exe (executable file - can be used to launch applications or similar programs - file permission is constant and set by user (admin/user)) [0%]
- .cmd (a form of executable file - designed to run a pre-scripted cmd through cmd.exe - file permission is constant and set by user (admin/user)) [0%]
Guides
Injection
not released
Creation
To keep users safe, your OS will be required to follow our verification process in order for your script to be used in this game.
Steps:
-
Upload your OS as a mainmodule onto the Roblox library
-
Send your submissions to here: [unavailable]
Format:
Roblox link: [link] Creator id: [userid]
-
Your OS will go through a 2-step check, one conducted by a computer (if flagged in this test, it will be denied and flagged as malicious) and one conducted by a human (if flagged in this test, you will be told why your OS was denied).
-
Your OS is now verified and any user can use it in the main game
Please note that you will be denied if your OS uses DataStoreService instead of the SaveDataAPI implemented into this.
Various documentation:
SaveDataAPI
User location: C:\OS\apis\SaveDataAPI.lua
Actual location: game.ServerScriptService.SaveDataAPI
Use
The SaveDataAPI was created to ensure that no one uploads code that abuses Robloxs DataStoreService, and/or accidentally edits DataStores designed for other OSes.
Methods
:GetOSStore(id)
- comparable to DataStoreServices :GetDataStore()
:GetSavedKey(store, key)
- " :GetAsync()
:SetKeySave(store, key, value)
" :SetAsync()
:UpdateKeySave(store, key, value)
- " :UpdateAsync()
Example
local SaveDataAPI = require(SaveDataAPI)
local OSStore = SaveDataAPI:GetOSStore(1)
local Time = SaveDataAPI:GetSavedKey(OSStore, UserId) or 0
if Time > 100 then
print(Time)
SaveDataAPI:UpdateKeySave(OSStore, UserId, 0)
end