# Metal source compilation ## Overview The Nabaztag:tag uses a virtual machine to run "bytecodes", quite like Java does. It makes it easier for the developpers to "update" the code at runtime (and I guess it also sandboxes the "user" code, allowing for better ressources management and maybe some security...). The bytecodes are written in a subset/version of a language called "Metal", written by Sylvain Huet. The Nabaztag:tag uses two bytecodes, that I will describe as: - The BOOT bytecode, which is embedded in the firmware and runs at boot time. It manages the configuration page and also the boot process of the Nabaztag (Wifi auth , DHCP, Firmware updates, ...) - The NOMINAL bytecode, which is downloaded when the Nabaztag boots. It will be the main runtime bytecode. The BOOT bytecode can only be updated through a firmware update, while the NOMINAL bytecode can be customized for every Nabaztag. But I'm no expert for this stuff; Pixel did a great job exploring and tweaking the bytecode to add functions, even before we had the sources, see the [OpenJabNab wiki](http://wiki.openjabnab.fr/) (French) for more informations. Well, now that we have the sources, the remaining question is: How to compile from a Metal source to an executable bytecode ? ## Get the source Git repo: `redox/mtl_linux.git` ## Compilation ## Conversion for embedding into the firmware ## Links