Eigenstate : Summer of Code 2016

Getting in Contact

The Myrddin hackers hang out in #myrddin on irc.eigenstate.org. Most design discussion happens there. The mentors are online using these screen names:

Ori

Ori Bernstein

ac

Andrew Chambers

mpu

Quentin Carbonneaux

k0ga

Roberto Vargas

We also have a mailing list, myrddin-dev@eigenstate.org, which you can sign browse and sign up for here: Mailing List. This is low traffic.

How to get Selected

The most important thing to do to get accepted is to talk to us. We'll be glad to help answer questions as you explore the projects of interest. A proposal will not be entirely new to the people evaluating it -- while the bulk of the work of writing it will be done by you, we will probably have helped flesh in parts of it. This isn't an exam, and there's no such thing as cheating.

In order to get in contact with the community, read the contributing page.

When we evaluate a proposal, we are trying to decide two things. First, we are trying to understand whether the project will be useful to us. If the end product doesn't solve a real problem, then we are unlikely to accept the project. Second, we are looking for evidence that indicates that you, the student, are able to successfully complete the project.

Therefore, a good proposal will hit all of the following points:

How Succeed after You Have Been Accepted

Summer of Code Project Ideas

Come with your own ideas

You are smart and imaginative, and there's no end of work on the queue. Feel free to propose your own idea. We'd be glad to discuss it with you before you submit to assess viability and usefulness.

Expected Results

You tell us!

Knowledge Prerequisite

Yes.

Challenge Rating

^\**\$

Mentor

Ori Bernstein, Andrew Chambers, Quentin Carbonneaux

System Call Generator

Currently, Myrddin system calls are implmented by hand for a small number of system calls, which are added as needed. Implementing a system call generator will write code that takes a machine readable list of system calls provided by the OS (for example, under FreeBSD, there is a file named syscalls.master), and generates a sys package that Myrddin can use.

Expected Results

By the end of this project, all Myrddin system calls for at least two major platforms will be implemented via autogeneration.

Knowlege Prerequisite: Bash scripting, writing makefiles, x86_64 assembly

Challenge Rating

*

Porting the Myrddin Runtime to Windows

Begin a port of the Myrddin progrmaming language to Windows. The porting process will involve compiler tweaks, assembly programming, interfacing with the OS at a low level and contributing to the design of Myrddin standard library.

Expected results

The standard mc toolchain can be compiled for windows using a cygwin based environment. Enough of the standard library will be functional such that the standard build tool 'mbld' can be used. This means runtime initialization, memory allocation and basic file io will work at as a minimum.

An excellent student can aditionally tackle other aspects of the std library including threads, sockets and any other aspect of the stdlib the student finds interesting and beneficial.

Knowledge Prerequisite

C programming, Bash scripting, writing makefiles, x86_64 assembly basics, general knowledge of windows api's, general operating systems knowledge.

Challenge Rating

***

Mentor

Ori Bernstein or Andrew Chambers

Implementing a Simple Package Manager

Myrddin currently has a build system, but has no package manager that integrates nicely with it. Ideally, we would have something similar to CPAN, Cargo, Go versioning, or similar tools for other languages. This project will be to design and implement a simple system to index packages, fetch them, and integrate them into the build.

Expected results

At the end of the summer, I will be able to run commands such as mbld fetch, which will get all dependent packages needed for building a piece of code, install them, and handle versioning and updating them.

Knowledge Prerequisite

Depends on final design. Basic HTTP, SSH, and git is needed.

Challenge Rating

**

Mentor

Ori Bernstein or Andrew Chambers

New Assembler/Linker

Create a new x86-64 assembler and linker for the Myrddin compiler toolchain.

This project will involve implementing a simple assembler and linker for Myrddin, written in Myrddin. The assembler will produce type information for the compiler. It will also produce a single output format.

The linker will consume a single input binary type, and output a statically linked binary in the format needed for all supported platforms.

Expected results

At the end of the summer, an assembler and linker will exist which can produce binaries for at least one target platform. The Myrddin compiler will be modified to invoke this compiler to generate binaries.

Knowledge Prerequisite

C programming, Bash scripting, writing makefiles, x86_64 assembly basics.

Challenge Rating

*** medium to high.

Mentor

Ori Bernstein or Andrew Chambers

Implement Myrddin parser in Myrddin

Myrddin currently has a parser, but this parser is written in C using Yacc. This project will build a parser library for Myrddin that can be consumed from other Myrddin code, and used for building tools, and eventually making the compiler self hosting.

Expected results

By the end of the project, the student will have a parser implemented that can parse itself, the Myrddin standard library, and spit out an abstract syntax tree for the code.

Knowledge Prerequisite:

Parsing algorithms, Bash scripting, writing makefiles, x86_64 assembly basics.

Challenge Rating

***

Mentor

Ori Bernstein or Andrew Chambers

Implement DWARF debug information

Curently, Myrddin is debugged at the assembly level, with comments that allow cross referencing line number information. While this is managable, it is far from ideal.

This project would implement DWARF debug information, finishing threading type information through the backend code, emitting information to track locations

Expected results

All assembly code in the Myrddin project will be written using an assembler written in Myrddin. The compiler will be able to bootstrap using this assembler.

Challenge Rating

****

Mentor

Ori Bernstein, or Quentin Carbonneaux

Implement Optimizations for QBE

QBE currently has a number of optimizations that are not implemented. A student that is interested in adding an optimization to QBE will select an optimization, make a case for why this optimization is a good choice to implemnt, and write code to implmeent it.

Expected results

QBE will have a new optimization that makes many benchmarks run faster.

Challenge Rating

** (depending on optimization selected)

Mentor

Ori Bernstein, or Quentin Carbonneaux

Implement new backend for QBE

QBE currently only supports x86-64. This project would add a new supported target architecture. This would involve refactoring the middle end to make sure that there are no target architectures, and adding the code to emit assembly for this new system. Of particular interest is one of the various ARM platforms, including Armv8.

Expected results

QBE will be able to emit code for the selected target architecture by the end of the summer.

Challenge Rating

***

Mentor

Ori Bernstein, or Quentin Carbonneaux