Ideas List - Google Summer of Code 2024

We are proud to announce that this year we will again be participating in Google Summer of Code. In this page we introduce some of the projects that are are working with us this year under the LabLua umbrella and list some potential ideas for GSOC 2024 projects.

If you are a contributor candidate, feel free to get in touch with us via our mailing list or by sending an email to one of our mentors. You can apply using one of the ideas in the list or you can bring your own idea. Either way, don't leave it to the last minute :)

Please use our application template to prepare your proposal.



Improved debugging support for Pallene

Pallene is a statically-typed programming language, intended to serve as a more performant companion to Lua. It is designed to to seamlessly interoperate with Lua, with first-class support for Lua data types.

Pallene is able to be faster than Lua (sometimes as fast as LuaJIT) by taking advantage of the type annotations in Pallene in order to guide the compiler into outputting efficient executable code. The catch, is that Pallene can receive dynamically-typed data from Lua and it must check if this data matches the expected types, before it can send it into the faster code paths. If Pallene receives a value of an unexpected type, it will immediately raise an exception and emit a stack trace. The objective of this project is to improve the debuggability of these stack traces.

The biggest problem is that currently the error message only shows the line number of the error. The stack trace does not show the Pallene stack frames, only any Lua stack frames that might be present. This is because, from Lua's point of view, Pallene stack calls are implemented as C function calls and the default Lua stack traceback does not show C stack frames. The main objective of this project would be to implement a way to include Pallene stack frames in the stack trace.

One risk of the project is that the code needed to support stack traces might potentially result in slower performance even when the code never encounters an error. Therefore, an additional requirement is that we measure the performance of the new implementation. If it is worse than before, it might be necessary to turn the improved stack traces into an optional feature instead of the default.

Expected results

Prerequisites

Skill level

Challenging

Project size

Large (350 hours)

Mentor

Hugo Musso Gualandi


Documentation generator tool for the Teal language

The goal of this project is to create a "tealdoc" tool that generates documentation from comments embedded in Teal source code. Teal is a statically typed language that compiles to Lua (Teal is to Lua somewhat like TypeScript is to JavaScript). Since Teal is essentially a superset of Lua, this tool should be useful for Lua as well. There is prior art for Lua (LuaDoc, LDoc), but the community would benefit from a Teal-specific tool that is able to make use of its type annotations as possibly integrate better with language servers in modern editors.

Expected results

Tools

Skill level

Intermediate

Project size

Large (350 hours)

Mentor

Hisham Muhammad


Port LuaRocks to Teal

LuaRocks is the package manager for the Lua language. It is written in pure Lua, making use of several optional libraries. The goal of this project is to port the LuaRocks source code to Teal, a statically typed language that compiles to Lua (Teal is to Lua somewhat like TypeScript is to JavaScript).

Porting LuaRocks to Teal comprises essentially of writing type annotations to its source code, but will also allow for many opportunities for refactoring and improving its codebase, understanding and reporting on limitations of the Teal language and possibly inform or contribute to its development.

Expected results

Tools

Skill level

Challenging

Project size

Large (350 hours)

Mentor

Hisham Muhammad


A Windows installer for LuaRocks

LuaRocks is the package manager for the Lua language. While the tool itself does have full Windows support, the installation process leaves much to be desired, due to the lack of standard package management systems on Windows. The goal of this project is to produce a native installer for LuaRocks on Windows using some FOSS GUI installer tool of your choice, that allows installing LuaRocks, Lua and configuring it with the user's compiler toolchain.

Expected results

Tools

Skill level

Easy/Intermediate

Project size

Large (350 hours)

Mentor

Hisham Muhammad


Adapt LuaSQL drivers to Lua 5.4

LuaSQL is a simple -- and unique -- interface from Lua to a DBMS: ODBC, ADO, Oracle, MySQL, SQLite, Firebird and PostgreSQL. Its main goal is a common API. The last version was tested against Lua 5.3. Although it should work with Lua 5.4, it was not tested. Also the code may benefit from new features from version 5.4.

Since the goal is to update the "Lua C API part" of the code, there is little knowledge of the DBMS' involved in the project. Also, since the code is very similar between the drivers, it should be easy to extend the effort to all drivers.

Expected results

Tools

Prerequisites

Skill level

Intermediate

Project size

Small (90 hours), Medium (175 hours) or (Large (350 hours) depending on the chosen drivers

Mentor

Tomás Guisasola


Lunatik binding for Human Interface Devices (HID) drivers

Lunatik is a framework for scripting the Linux kernel with Lua. For example, Lunatik can be used for scripting the Linux networking subsystem (as presented at Netdev 0x14 and 0x17) among other examples.

The purpose of this project is to create a Lunatik library for binding the Linux HID APIs to allow developers to write new HID drivers using Lua. This project might leverage the Lunatik device library, which allows the creation of character device drivers using Lua. Moreover, this project should also port the Nvidia Shield HID driver to Lua.

Expected results

Prerequisites

Skill level

Challenging

Project size

Large (350 hours)

Mentors

Lourival Vieira Neto


Port Lua Test Suite to Lunatik

Lunatik is a framework for scripting the Linux kernel with Lua. For example, Lunatik can be used for scripting the Linux networking subsystem (as presented at Netdev 0x14 and 0x17) among other examples.

The purpose of this project is to port the Lua Test Suite to Lunatik. That is, to adapt scripts from the Lua Test Suite and develop a Linux loadable kernel module containing its C portion. This project might leverage the GSoC 2015 project developed by Guilherme Salazar, which ported the Lua Test Suite to the NetBSD kernel.

The main difference between the kernel Lua and regular user-level Lua is that kernel Lua doesn't have support for standard libraries that depend on operating system (e.g., io and os) and for floating-point numbers.

Expected results

Prerequisites

Skill level

Intermediate

Project size

Medium (175 hours)

Mentors

Guilherme Salazar and Lourival Vieira Neto


Lunatik binding for Netfilter

Lunatik is a framework for scripting the Linux kernel with Lua. For example, Lunatik can be used for scripting the Linux networking subsystem (as presented at Netdev 0x14 and 0x17) among other examples.

Netfilter is a packet filtering framework provided by the Linux kernel. It implements a set of hooks at well-defined points in the packet traversal of the network stack, allowing registered callback functions to receive and act upon every packet that reaches their associated hooks. The callback functions are defined by loadable kernel modules that dynamically extend Netfilter in order to set up custom filtering strategies.

NFLua is an extension module to Netfilter which provides a kernel-scripting framework for packet filtering using an older version of the Lunatik's Lua interpreter. The purpose of this project is to create a new Lunatik library for binding Netfilter to allow the creation of Netfilter extension modules in Lua (instead of using Lua for scripting a single Netfilter module like NFLua). This project should provide Lua APIs for hooking Netfilter (similarly to Lunatik device library, which allows the creation of character device drivers using Lua).

Expected results

Prerequisites

Skill level

Challenging

Project size

Large (350 hours)

Mentors

Marcel Moura and Lourival Vieira Neto


Lunatik package for Linux distros

Lunatik is a framework for scripting the Linux kernel with Lua. For example, Lunatik can be used for scripting the Linux networking subsystem (as presented at Netdev 0x14 and 0x17) among other examples.

The purpose of this project is to create Lunatik packages for some Linux distributions including, at least, Ubuntu, OpenWRT and VyOS. This project should also provide the documentation and templates for creating packages for new Lunatik libraries.

Expected results

Prerequisites

Skill level

Intermediate

Project size

Small (90 hours)

Mentors

Marcel Moura and Lourival Vieira Neto