Skip to content

Project Ideas

László Csomor edited this page Mar 6, 2019 · 33 revisions

This page is targeted mainly at Google Summer of Code 2019 candidates, although it might contain interesting ideas to anyone willing to contribute to Bazel.

Project proposal process

All descriptions below assume some familiarity with Bazel. We encourage you to first read the documentation on our website (bazel.build) and try Bazel on a small project. Additionally, we collected a list of easy to fix bugs that would make for a good first contribution to Bazel!

We expect many students to apply to Google Summer of Code 2019 with Bazel. Only one or two students will eventually be accepted. We will accept a student only if we are convinced they can contribute efficiently to the project. The best way to convince us is to start contributing now.

This page lists a few project ideas, but we are open to new ones too. Do you have an awesome idea you want to implement for Bazel? Send us an email to [email protected] with the subject "GSoC 2019 project idea", and describe your idea (what it is, why it's important, how it would make Bazel better, how you plan to tackle it, etc.), to help us understand and discuss it with you.

Remember that you have to submit the final proposal to the Google Summer of Code site -- this, along with much more information, is described on the Google Summer of Code FAQ.

Project ideas

Sandboxing on Windows

  • Description: Bazel on Linux already supports various ways to run actions in a sandbox (linux-sandbox, processwrapper-sandbox). We want to support sandboxing on Windows too.

    Design and implement a way to execute actions in a sandbox on Windows, and integrate it with Bazel.

    We recommend using Microsoft Build Accelerator's example project as the foundation.

  • Related issue: https://github.com/bazelbuild/bazel/issues/5136

  • Knowledge prerequisite: Experience with C/C++ and Windows API programming. Knowing Java is a plus, knowing Detours or the aforementioned Microsoft Build Accelerator example project and its inner workings is a big plus.

  • Mentor: laszlocsomor (at google.com)

Starlark language

  • Description: Starlark language was designed for Bazel. The language has now a specification, 3 implementations (in Java, in Go, in Rust), and is used outside Bazel.

    The goal of this project is to ensure the different implementations are in sync. This includes creating a common test suite, identifying and resolving corner-cases, suggesting changes to the language specification. It would be useful to compare the performance of the implementations (to find performance issues) and improve the interpreter in Java.

  • Prerequisites: good testing skills, experience with compilers, knowledge of Java (knowing some Go or Rust is a plus).

  • Getting started: Get familiar with the Starlark language, and its implementations. File bugs, find issues in the specification. Some issues to look at: #24, #35, #18, #10

  • Mentor: laurentlb (at google.com)

Static type checker for Starlark

  • Description: Starlark language was designed for Bazel. The language uses a dynamic type system. However, it is possible to do (partial) type checking statically, in some cases. Static types can be useful for catching errors early as well as for refactoring, linter, code completion.
  • Prerequisites: experience with type systems and type inference, knowledge of Go.
  • Getting started: Buildifier already contains a Starlark parser and linter. You can first get familiar with Buildifier code base, and its AST representation. Maybe look at how Typescript type system works and would fit with Starlark.
  • Mentors: laurentlb, lpino (at google.com)