Avancé·2 min·10 mai 2026

Un dev code un serveur web en pur ARM64 assembly

🎧 Résumé audio0:00 / 0:00
Quand tu écris chaque ligne d'un serveur HTTP directement en langage machine, juste pour voir si c'est possible.
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.

🔭 Curieux

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.

Newsletters Noésis

3 minutes d'IA dans ta boîte mail, chaque matin.

Rejoins les francophones qui comprennent, essaient et progressent avec l'IA. Choisis ce que tu veux recevoir. Désabonnement en 1 clic.

Explorer les thèmes de cet article :