================================= Can I run Python code on Morello? ================================= If you are running in hybrid mode, you can install the default CPython interpreter with: .. code-block:: bash pkg64 install python3 This works fine, but does not have runtime support for capabilities or fine-grained memory protection. Building MicroPython -------------------- MicroPython is a cut-down Python interpreter, designed for embedded systems. It has a smaller range of libraries than the default CPython. There is a fully functional port of MicroPython to purecap on CheriBSD. Below are the instructions for building MicroPython natively on the CheriBSD Morello platform. .. code-block:: bash # download the source code from github git clone https://github.com/glasgowPLI/micropython cd micropython git fetch origin morello-dev git switch morello-dev cd ports/unix # install dependencies pkg64 install git gmake llvm-morello python3 pkgconf pkg64c install libffi # now build micropython gmake CC='clang-morello -march=morello -mabi=purecap' CXX='clang++-morello -march=morello+c64 -mabi=purecap' LIBFFI_LDFLAGS='-L/usr/local/lib -lffi' submodules gmake CC='clang-morello -march=morello -mabi=purecap' CXX='clang++-morello -march=morello+c64 -mabi=purecap' LIBFFI_LDFLAGS='-L/usr/local/lib -lffi' # the binary is at ./build-standard/micropython Using MicroPython ----------------- The purecap MicroPython build on Morello supports tight bounds for allocations, as demonstrated by this unsafe code below, which works in vanilla MicroPython but causes a capability protection fault on Morello. .. code-block:: python import uctypes as uct tiny = bytearray(1) ptr = uct.addressof(tiny) # create a new bytearray based on ptr unsafe = uct.bytearray_at(ptr, 16384) # access out-of-bounds memory unsafe [200] = 0x1f Further references ------------------ * Paper about `MicroPython port to CHERI `_ (published at ACM SIGPLAN MPLR 2023 conference) * Paper about `optimizing MicroPython port to CHERI `_ (published at ACM SIGPLAN VMIL 2023 workshop) * Documentation for `MicroPython project `_ (the most relevant docs are for the Unix port))