Roadmap for Nuitka

This is the Nuitka roadmap, broken down by features.

Onefile

  • Add support for macOS (public feature)

    The initial goal here is to make the temp directory mode work on Linux too, that is going to be largely what it takes. The %TEMP% etc notations might be a bit of research to find out the proper values.

  • Add zstd compression (public feature)

    The file reading is already somewhat abstracted. After adding support for Linux with the bootstrap code (Linux works without it, and in a better way), it should be more easy for me to develop this, as Windows is kind of a hostile environment for me in terms of the debugging.

  • Add support for upx (public feature)

    The UPX cannot compress payloads, which is why we can't use it. However, a post processing of binaries, even from CPython extension modules, seems to work and reduce the uncompressed sizes of binaries already.

Standalone

  • The main binary will be separated from the dist folder. (undecided)

    Allowing a common place for the binary to load from, with some sort of repository to load from.

  • Windows: Attempt to avoid need to copy the DLL by using a ".cmd" file that sets the PATH to make it find the CPython DLL, which otherwise would have to be exempted. Also a minor bootstrap approach could be considered, where we to what this does in an executable to the launch an attached binary with that configuration.

  • Windows: Provide builds of CPython that will allow static linking, avoiding the CPython DLL.

  • Forcing output and stderr to files should be supported for all OSes.

  • Dejong Stacks: More robust parser that allows stdout and stderr in same file with mixed outputs.

Performance (public)

  • Caching of demoted to bytecode modules. Some of these, e.g. pkg_resources take very long to analyse in Nuitka, just to find out the imports. There is no point in repeating this, a caching of Python compilation is a separate line of action, but it should start with this.

  • Better Python3 threading on 3.8 or higher.

    There is now a better way to yield the GIL than what Nuitka does. Older Python3 versions allowed no interactions, but newer ones do.

  • Better code for += 1 constructs with lack of type knowledge.

    There is a long standing todo, to add the CLONG support for binary operations. It requires the code generation of Jinja to be abstract, but that should have been close to being reached in last releases.

  • Better code for += 1 constructs even with lack of type knowledge.

    It should be possible to introduce prepared constants of nuitka_int type that have the object ready for use, as well as the integer value, and indicate so with the enum setting. This type, that is intended for use with local variables later on, could also be supported in binary operations and in-place operations, esp. for int, float and long values.

Container Builds (undecided)

Providing containers with old Linux, and optimally compiled CPython with podman such that building with Nuitka on Fedora latest and Ubuntu latest can be done fully automatically.

Features to be added for 0.6.15

[ ] Attempt to avoid need to copy the DLL by using a .cmd file that sets

the PATH to make it find the CPython DLL.

[ ] Compression of onefile for Windows

[ ] Add onefile for macOS

[ ] Better Python3 threading on 3.8 or higher.

Features to be added for 0.6.16

[ ] Better scalability