Un dev code un serveur web en pur ARM64 assembly
Pourquoi ça compte pour toi
C'est un projet de fou utile pour comprendre comment fonctionnent réellement les syscalls, la mémoire, et les protocoles bas niveau. Si tu veux apprendre l'assembly ou décortiquer comment un serveur web marche sous le capot, ymawky est une mine d'or : code source lisible, gestion d'erreurs propre, protection contre les attaques simples (slowloris, traversée de répertoires). Pas de dépendances C, zéro libc.
Ce qu'il faut retenir
- 1.Serveur statique complet en ARM64 assembly, macOS/Silicon, un processus forké par connexion
- 2.Prise en charge de GET/PUT/DELETE/OPTIONS/HEAD, plages d'octets, téléversement jusqu'à 1 Go, détection MIME
- 3.Protections intégrées : décodage URL, blocage des liens symboliques, délai d'expiration 10s, rejet de traversée de répertoires
Tu galères avec le jargon ?
Lis la version réécrite en mode débutant — toutes les idées, sans le jargon.
Pourquoi faire ça ?
Le dev l'avoue : c'est un projet un peu fou pour « donner du sens à sa vie ». Mais en chemin, il a construit un serveur HTTP fonctionnel, lisible, et qui respecte les standards HTTP/1.0 et HTTP/1.1.
Ce qu'il sait faire
ymawky c'est un serveur de fichiers statiques. Pas de PHP, pas de Node, pas de dynamique. Mais il gère :
- ▸Méthodes HTTP : GET, PUT, DELETE, OPTIONS, HEAD
- ▸Téléversement : PUT atomique (écriture en fichier temporaire, puis renommage) jusqu'à 1 Go par défaut
- ▸Plages de fichier :
bytes=X-N,bytes=-N,bytes=X-(défilement vidéo/audio OK) - ▸Types MIME : 40+ formats reconnus (HTML, CSS, JS, PNG, MP4, PDF, etc.)
- ▸Listing de répertoires : affiche les fichiers si pas d'index.html
- ▸Pages d'erreur perso : 404, 500, etc. en HTML personnalisé
- ▸Décodage URL :
%20→ espace,%61→ 'a'
La sécurité
Le dev a fait du vrai travail :
- ▸Bloque les traversées de répertoires (
/../../../etc/passwd→ 403) - ▸Refuse les liens symboliques avec
O_NOFOLLOW_ANY - ▸Protège contre slowloris : délai d'expiration de 10 secondes global, 10 secondes par bloc
- ▸Limite les chemins à 4096 octets (PATH_MAX)
- ▸Isole tout dans
www/(racine de documents configurable) - ▸Les PUT écrivent en temporaire, puis renomment (atomicité)
Les limites
- ▸ARM64 sur macOS uniquement (portage Linux possible mais compliqué)
- ▸Écoute que sur 127.0.0.1 (localhost), pas de liaison personnalisée
- ▸Pas de prise en charge HTTPS
- ▸Pas de CGI ni de PHP
- ▸Sans état : chaque requête = fork d'un nouveau processus
Comment l'utiliser
make # compile
./ymawky [port] # démarre sur 127.0.0.1:8080 ou [port]
curl http://127.0.0.1:8080/index.html
Faut une structure :
./ymawky
./www/index.html
./err/404.html
./err/500.html
Qui devrait s'y intéresser ?
Ceux qui veulent comprendre :
- ▸Comment un serveur HTTP parle réellement TCP/IP
- ▸L'assembly ARM64 en contexte réel
- ▸Pourquoi on utilise des frameworks (réponse : écrire HTTP à la main c'est pénible)
Pas un truc pour mettre en prod, c'est clairement un outil d'apprentissage. Mais bien écrit.
Et concrètement pour toi ?
Choisis ton profil — la lecture de l'article change selon qui tu es.
Pour toi, ce projet démontre qu'on peut construire quelque chose de robuste et sécurisé sans dépendre d'écosystèmes complexes : comprendre cette démarche minimaliste change ta vision de ce qu'est vraiment la tech solide.
Essayer maintenant
Explorer le code sur GitHub →Source
Pour aller plus loin
Cet article t'a donné envie d'approfondir ? Deux formations Noésis t'attendent :
Explorer les thèmes de cet article :