# SQR / SQRM / SQRL (SQRELF) Formats ModuOS userland programs and related binaries use the **SQRELF** naming convention. ## Terminology - **SQR** == **SQRELF** == **Squirrel Executable and Linkable Format** - Typical file extension: `.sqr` - Meaning: a normal executable program (similar role to an ELF executable on Linux). - **SQRM** == **SQRELFM** == **Squirrel Executable and Linkable Format Module** - Typical file extension: `.sqrm` - Meaning: a loadable module (kernel module / driver module). - **SQRL** == **SQRELFL** == **Squirrel Executable and Linkable Format Library** - Typical file extension: `.sqrl` - Meaning: a shared/static library style binary meant to be linked against. ## Relationship to ELF At a binary level, ModuOS currently builds userland programs with an **ELF64 toolchain** (`x86_64-elf-gcc` + `x86_64-elf-ld`). The **SQR/SQRM/SQRL** names are therefore: - A *project naming convention* for what the binary represents (executable/module/library) - A *file extension convention* used by the ModuOS ecosystem In other words: - `.sqr` files are effectively **ELF64 executables** used by ModuOS. ## Where these files live - ISO image apps: `targets/AMD64/iso/Apps/*.sqr` - Example apps shipped on the ISO: `cat.sqr`, `echo.sqr`, `memtest.sqr`, `sh.sqr`, `neofetch.sqr` ## Building a `.sqr` ```bash cd userland x86_64-elf-gcc -c program.c -o program.o x86_64-elf-ld -T user.ld program.o -o program.sqr ```