J'ai créé un système d'exploitation 🥴
Publié : sam. 02/mai/2026 15:49
Coucou les gens!
Vous avez déjà entendu parler des OS pour navigateurs écrit en javascript qui sortent de temps en temps? Quand on laisse un geek devant un PC sans surveillance pendant un peu trop longtemps? Bah justement...

Voilà KumOS, un OS cloud 100% écrit avec PB et SB.
Il a toutes les fonctionnalités dont vous pourriez rêver: son propre system de fichier, une gestion des utilisateurs, un environnement graphique, une gestion des applications... En gros, le summum de la technologie de 2004 disponible AUJOURD'HUI!
À la base, je voulais le sortir comme poisson d'avril, mais il se trouve que c'était beaucoup plus compliqué que prévu, et j'ai mis un mois de plus à atteindre les objectifs que je m'étais fixé.
Alors, nous y voilà: amusez-vous bien avec mon poisson de mai
!
1. Je veux juste tester ton truc
Cool: Téléchargez Server.zip, compilez le project PureBasic avec le debugger activé, et il va démarrer un serveur local. Visitez http://localhost:8080/ dans votre navigateur, logez-vous avec admin/admin.
Il y a une application démo que vous pouvez installer dans KumOS: https://lastlife.net/ForumUpload/HelloWorld.zip
2. Comment ça marche?
L'idée générale est assez simple: on a un serveur FCGI écrit en PureBasic et un front-end en SpiderBasic
Le serveur est une application FastCGI multithreadée exécutée derrière un serveur HTTP. Il gère l'authentification des utilisateurs avec des mots de passe chiffrés SHA-256 et des cookies de session, un système de fichiers virtuel basé sur des métadonnées dans une base SQLite et des fichiers bruts sur disque, ainsi qu'une boutique d'applications tierce qui télécharge, valide et extrait les paquets d'applications à partir d'archives ZIP. Tout est routé via un routeur unique basé sur PATH_INFO à base de Select/Case.
L'API est une interface JSON REST simple, accessible via /api/. L'authentification se trouve à l'adresse /api/auth/, le système de fichiers à /api/fs/ et la boutique d'applications à /api/apps/. Le système de fichiers propose les opérations classiques, list, stat, read, write, mkdir, delete, move, toutes limitées à l'utilisateur connecté. La boutique d'applications ajoute les opérations d'installation, de désinstallation, de liste et une route de distribution de paquets d'applications par utilisateur. Les fichiers statiques, y compris l'interface SpiderBasic compilée, sont servis directement par le serveur HTTP. Seuls les appels API transitent par le processus FastCGI de PureBasic.
L'interface communique avec le serveur exclusivement via des requêtes HTTP standard, grâce à la fonction HTTPRequest() de SpiderBasic. Les applications tierces constituent un cas particulier : elles s'exécutent dans des iframes isolées (sans allow-same-origin, ce qui garantit leur isolation même si elles sont hébergées sur le même serveur) et ne peuvent pas effectuer d'appels API directement. Elles communiquent avec le bureau via postMessage, et ce dernier, après avoir vérifié les permissions déclarées de l'application, effectue l'appel API en leur nom et renvoie le résultat. Ainsi, une application malveillante ne peut accéder à vos fichiers ni à votre session, sauf si vous lui en avez explicitement accordé l'autorisation lors de son installation.
3. Je veux créer une application pour KumOS!
Ok. C'est bizarre, mais je suis mal placé pour juger un autre nerd!
vous aurez besoin d'un manifest.json à la racine de votre zip, il doit déclarer l'identité et les permissions de votre app:
Les permissions disponibles sont storage (pour accéder à l'espace privé de l'application sur le système de fichier), notify (pour les messages type toasts), fs.read et fs.write (pour accéder au système de fichier complet).
En JS/HTML:
Dans votre index.html, ajoutez le SDK et KUMOS.ready() au tout début:
En SpiderBasic:
Commencez par inclure ce fichier à votre projet: KUMOS.sbi.
Le SDK SB encapsule le même protocole dans un module SpiderBasic: KUMOS::Storage_Read(Path, @Callback()), KUMOS::Notify_Toast(Message, KUMOS::#Success), etc. Appelez d'abord KUMOS::Init(), puis KUMOS::Ready(@OnReady()), et effectuez toute votre initialisation depuis le callback OnReady. Un projet modèle complet et commenté est disponible ici..
4. Some notes:
Vous avez déjà entendu parler des OS pour navigateurs écrit en javascript qui sortent de temps en temps? Quand on laisse un geek devant un PC sans surveillance pendant un peu trop longtemps? Bah justement...

Voilà KumOS, un OS cloud 100% écrit avec PB et SB.
Il a toutes les fonctionnalités dont vous pourriez rêver: son propre system de fichier, une gestion des utilisateurs, un environnement graphique, une gestion des applications... En gros, le summum de la technologie de 2004 disponible AUJOURD'HUI!
À la base, je voulais le sortir comme poisson d'avril, mais il se trouve que c'était beaucoup plus compliqué que prévu, et j'ai mis un mois de plus à atteindre les objectifs que je m'étais fixé.
Alors, nous y voilà: amusez-vous bien avec mon poisson de mai
1. Je veux juste tester ton truc
Cool: Téléchargez Server.zip, compilez le project PureBasic avec le debugger activé, et il va démarrer un serveur local. Visitez http://localhost:8080/ dans votre navigateur, logez-vous avec admin/admin.
Il y a une application démo que vous pouvez installer dans KumOS: https://lastlife.net/ForumUpload/HelloWorld.zip
2. Comment ça marche?
L'idée générale est assez simple: on a un serveur FCGI écrit en PureBasic et un front-end en SpiderBasic
Le serveur est une application FastCGI multithreadée exécutée derrière un serveur HTTP. Il gère l'authentification des utilisateurs avec des mots de passe chiffrés SHA-256 et des cookies de session, un système de fichiers virtuel basé sur des métadonnées dans une base SQLite et des fichiers bruts sur disque, ainsi qu'une boutique d'applications tierce qui télécharge, valide et extrait les paquets d'applications à partir d'archives ZIP. Tout est routé via un routeur unique basé sur PATH_INFO à base de Select/Case.
L'API est une interface JSON REST simple, accessible via /api/. L'authentification se trouve à l'adresse /api/auth/, le système de fichiers à /api/fs/ et la boutique d'applications à /api/apps/. Le système de fichiers propose les opérations classiques, list, stat, read, write, mkdir, delete, move, toutes limitées à l'utilisateur connecté. La boutique d'applications ajoute les opérations d'installation, de désinstallation, de liste et une route de distribution de paquets d'applications par utilisateur. Les fichiers statiques, y compris l'interface SpiderBasic compilée, sont servis directement par le serveur HTTP. Seuls les appels API transitent par le processus FastCGI de PureBasic.
L'interface communique avec le serveur exclusivement via des requêtes HTTP standard, grâce à la fonction HTTPRequest() de SpiderBasic. Les applications tierces constituent un cas particulier : elles s'exécutent dans des iframes isolées (sans allow-same-origin, ce qui garantit leur isolation même si elles sont hébergées sur le même serveur) et ne peuvent pas effectuer d'appels API directement. Elles communiquent avec le bureau via postMessage, et ce dernier, après avoir vérifié les permissions déclarées de l'application, effectue l'appel API en leur nom et renvoie le résultat. Ainsi, une application malveillante ne peut accéder à vos fichiers ni à votre session, sauf si vous lui en avez explicitement accordé l'autorisation lors de son installation.
3. Je veux créer une application pour KumOS!
Ok. C'est bizarre, mais je suis mal placé pour juger un autre nerd!
vous aurez besoin d'un manifest.json à la racine de votre zip, il doit déclarer l'identité et les permissions de votre app:
Code : Tout sélectionner
{
"id": "com.yourname.yourapp",
"name": "My App",
"version": "1.0.0",
"icon": "🚀",
"entry": "index.html",
"permissions": ["storage", "notify"]
}En JS/HTML:
Dans votre index.html, ajoutez le SDK et KUMOS.ready() au tout début:
Code : Tout sélectionner
<script src="/kumos.js"></script>
<script>
KUMOS.ready().then(function() {
KUMOS.window.setTitle('My App');
KUMOS.notify.toast('Hello from My App!', 'success');
});
</script>Commencez par inclure ce fichier à votre projet: KUMOS.sbi.
Le SDK SB encapsule le même protocole dans un module SpiderBasic: KUMOS::Storage_Read(Path, @Callback()), KUMOS::Notify_Toast(Message, KUMOS::#Success), etc. Appelez d'abord KUMOS::Init(), puis KUMOS::Ready(@OnReady()), et effectuez toute votre initialisation depuis le callback OnReady. Un projet modèle complet et commenté est disponible ici..
4. Some notes:
- Au cas où c'était pas claire, Kumos est un projet pour rigoler (même si j'ai mis un boulot de fou dedans). je ne vais régler aucun bug, ajouter aucune fonctionnalités, et de toute façon, il est déjà à deux doigts d'exploser en l'état..
- J'ai fait de gros efforts pour réduire le JS autant que possible et, à l'exception des API, c'est presque du SpiderBasic pure. Même si KUMOS n'a aucun intérêt en dehors de la blague, je crois que c'est une vraie démo des capacités de SpiderBasic.
- Dites merci à ma série sur Duolingo pour le nom : kumo (雲) signifie Nuage (cloud, ça marche mieux en anglais) en japonais, et kumo (蜘蛛) signifie araignée. Le jeu de mot était trop fort, j'ai pas pu résister.