Skip to content

Google Summer of Code 2016 Starter Task

Bobby Powers edited this page Mar 7, 2016 · 7 revisions

Since Browsix is a brand new operating system and shell, it is still incomplete. There are many opportunities for you to make it better!

Your task is to:

  1. Fork the repository.
  2. Pick a utility to implement that is not currently in Browsix. Some ideas are listed here. Existing commands are in /src/bin. When you choose a command, please comment on the open issue that you intend to implement it. If you choose a utility that doesn't have an open Github Issue, please create one.
  3. Utilities should be implemented in TypeScript
  4. If this utility requires additional kernel functionality, implement the required system calls kernel-side and in browser-node
  5. Write a test that exercises that utility. Take a look at the existing tests in /test for examples.
  6. Open up a pull request with the utility and test.
  7. Work with us until we merge your fix in.

Refer to the main project's README for information on how to run Browsix, how to write tests, and how to run the test suite.

We recommend that you use GitHub's Atom editor with the atom-typescript and AutoComplete Plus plugins installed. The editor will give you intelligent autocomplete suggestions based on TypeScript type annotations.

Background Information

You should review our TypeScript Background Information to learn more about TypeScript, and how it differs from JavaScript.

Questions?

If you have any specific questions, feel free to email our mailing list or drop into IRC at #plasma-umass@irc.freenode.net.

Sample workflow

  • Look at the man page for the utility, and figure out what it is supposed to do at a high level
  • Play around with the version provided by your Linux distribution/Mac in the terminal to get a feel for how it works
  • Look at the simple implementation of that utility in sbase
  • Figure out what system calls the utility uses to perform its task -- strace is a useful tool for this.
  • Look at the node documentation for the fs module to figure out what API calls you will need to make (using the functions that accept a callback, not the ones with names that end in *Sync)
  • work on an implementation in TypeScript - the filename should be src/bin/$UTILITY.ts where $UTILITY is the traditional Unix name of the utility
  • running make bin will compile your typescript to JavaScript, and put versions of the utilities in fs/usr/bin. you can run these versions directly from the command line on your computer outside of the browser -- this will let you compare their behavior to that of the standard linux utilities
  • when you think you have it working well, make a test case for it in /test -- look at some of the existing tests for examples.