GSoC Project: Making Redox Self-hosting, Status Report 2

By ids1024 on

As previously reported, I am working on making Redox self hosting for the Google Summer of Code.

Cargo

Based on how far I was at the time of my last report, I was hoping cargo would be working on Redox by now. But that is not yet the case.

It took a while to find one bug that was interfering with cargo; an issue with the implementation of Convdar on Redox. The remaining issue seems to be in jobserver-rs; the modifications I made to it to run on Redox were incorrect. It should be possible to port that properly once Redox has full support for signals and signal handlers.

Cargo also is unable to fetch the registry; I’m not sure why, but hopefully it will work better once Redox switches to a network stack based on smoltcp.

Symlinks

symlink() and readlink() are two functions I’ve had to comment out of C code I’ve ported, and the gcc and dash packages needed to use scripts for /bin/cc and /bin/sh since symlinks weren’t available, so it seemed about time to implement symlinks. To be able to create symlinks when building Redox, I also had to make symlinks work in redoxfs’s fuse mount, and improve support for symlinks in upstream tar-rs.

There were various other small things to address, like adjusting libstd and newlib, and adding a readlink command.

Other libc functions

I added the getppid() system call (which was trivial), and sent a PR adding that function to Redox’s newlib, along with inet_pton() and inet_ntop(). And later I added gethostname(). The goal here is mainly to reduce the amount of patching needed for C programs.

Git

One issue with git was caused by a bug in Redox’s pipe scheme. With some dificulty, I managed to create a recipe for git that includes support for http(s) via curl; it was somewhat dificult tricking it into finding the dependencies and linking correctly. I added a way to specify build dependencies for static libraries needed by C programs in the cookbook, which helps with git since it depends on several libraries.

Git still doesn’t work yet.

Python

I’ve created an initial patch and recipe for python, which now runs although it is not fully functional. This was partially because LLVM and Rust require Python to build, so it should be available for full self-hosting; although it looks like they require Python 2… but I makes a good screenshot anyway.