Nuitka and Google Summer of Nuitka

About Nuitka

Nuitka is a project to write a Python compiler in Python. Unlike PyPy, it is about static compilation, and aims to be less complex, but fully compatible with gradual degradation of performance, up to C level.

What we do

The software created is a compiler that is a drop-in replacement for CPython and derivatives like Anaconda.

Why is it interesting?

Python is used in a lot of places, but when it comes to performance, other languages are used, have to be used. Nuitka aims at changing it. Making Python even more of a choice for high performance computing.

Who uses it?

Nuitka already has a lot of users. Many of these are most interested in the packaging side, but also some care about even tiny performance improvements, like the roughly 2x-3x speed up achieved in most cases.

What languages is it written in?

Nuitka is written in Python. It has a C run time, that for some ideas you would have to touch, for some you absolutely do not. There is a lot to be done in pure Python, esp. static optimization.

How is it going to change the world?

Being able to write C speed code in a language as simple as Python. What else to say. This is taking Python where it currently cannot be.

Contacting Nuitka

For the purpose of GSoC the Nuitka development mailing list can be used, as well as private email. We will be reachable via Hangout/Duo calls on a regular basis.

We will be able to accomodate all time zones somehow.

Getting Started

Nuitka setup is trivial and explained in the user manual (link TODO). Using Anaconda Python on Windows, or a normal Linux system, and you are good to go with a git clone of Nuitka. See download page (link TODO)

Bug fixes and features are expected to be done via PRs on Github. We can guide you through that, it's easy.

TODO: Links to advice about applications and the application template goes here.

Remember, Nuitka must be the title of their applications!

1. Nuitka support for PyPI top 50

Project description: Nuitka works with most software. The aim of this project is to make sure it's true for the top 50 packages on PyPI, by compiling and using their example codes.

In a first stage, you would identify and report the issues to the bug tracker, in a second stage develop tools that help to narrow down issues, e.g. what extension module fails to load precisely, even with a segfault happening, and put them to use and try to fix a few of the simpler issues.

Setting up these as automated tests would be the ultimate goal, so we can follow these top 50 packages with Nuitka over time and make sure they continue to work.

In the past it has happened e.g. that Jinja2 was breaking for Python3.7, and it would be cool to discover this immediately.

Skills: Python programming, pip installation, Linux and/or Windows installs of Python, one is good, both would be great.

Difficulty level: Easy

Potential mentors: Kay Hayen

2. Nuitka one file standalone option

Project description: Nuitka has a mode meant for distribution to another system that puts everything needed in a single folder.

One complaint often raised is that it's a folder rather than a single file, for alternative packaging methods, e.g. py2exe and pyinstaller, these do actually exist, and this project would be about integrating with that.

In a first stage, you would identify the code of these tools that is doing it and try to port it to Nuitka for one or more platforms.

Skills: Python programming, Linux and/or Windows installs of Python, both would be great.

Difficulty level: Easy

Potential mentors: Kay Hayen

3. Nuitka benchmarks

Project description: Nuitka has too little in the way of measuring the actual performance gains one has. You would change that.

In a first stage, you would enhance the existing speedcenter to provide a more complete set of micro-benchmarks, for the different levels of optimization, with more or less type knowledge. You would then as a second step add a history of commits in some form of graphs that extend over a longer perioud of time, and automatically identify changes that e.g. produce equivalent C code.

Skills: Python programming, Linux installs of Python, C tooling would be nice, but can be mentored.

Difficulty level: Intermediate

Potential mentors: Kay Hayen

4. Nuitka all built-ins

Project description: Nuitka has support for many built-ins, e.g. len already, which means dedicated C code, compile time evaluation, type shapes produced (in this case an int), but there are some notable exceptions, e.g. enumerate where we know types too, that are still missing, but definitely can have high performance impact on some loops.

Your task would be to immitate existing built-in codes to achieve a complete support for ultimately all C built-ins. The first step would be to identify which ones are missing (by means of a warning added), then to find out in test runs of the test suites, which ones are warned about, and to resolve as many of those as possible. It is assumed that all should be possible.

Skills: Python and C programming, platform wouldn't matter

Difficulty level: Intermediate

Potential mentors: Kay Hayen

5. Nuitka MacOS CI

Project description: Nuitka has currently no CI for MacOS, which means it can be broken in any release.

Your task would be to enhance the Travis configuration to introduce that the tests are run on MacOS too. Ideally you would also manage to get Anaconda on that platform used, but that is not expected.

Your mentors will not be able to help with MacOS specifics. Nuitka is known to work on the platform, but Travis might expose differences that need some addressing.

Skills: Travis, MacOS platform, XCode tooling

Difficulty level: Hard

Potential mentors: Kay Hayen