Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| summerofcodeideas [2022/11/03 18:41] – JosephMingrone | summerofcodeideas [2023/07/07 16:23] (current) – fix typo in MFSBD project JosephMingrone | ||
|---|---|---|---|
| Line 15: | Line 15: | ||
| We also have a generic %%FreeBSD%% ideas page at IdeasPage and WantedPorts. | We also have a generic %%FreeBSD%% ideas page at IdeasPage and WantedPorts. | ||
| - | For a feel for projects from previous years, visit: [[SummerOfCode2021|SummerOfCode2021]], | + | For a feel for projects from previous years, visit: |
| ===== How to use this idea list ===== | ===== How to use this idea list ===== | ||
| Line 39: | Line 39: | ||
| * **Scripting**: | * **Scripting**: | ||
| - | |||
| - | ====== Ideas list ====== | ||
| ---- | ---- | ||
| Line 106: | Line 104: | ||
| To come. | To come. | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ==== Convert all FDT drivers attachments to be table driven and mark with PNP_INFO ==== | ||
| - | |||
| - | | Mentor | [[WarnerLosh|Warner Losh]] < | ||
| - | | Skills | C (intermediate), | ||
| - | | Mid-term deliverable | First 2/3 of drivers converted, preliminary GENERIC pruning for 1 board that boots with drivers loading | | ||
| - | | Duration | 350 hours | | ||
| - | | Difficulty | Medium | | ||
| - | | Expected Outcome | All drivers converted, armv7 GENERIC pruned, booting on multiple boards with drivers loading at boot as needed | | ||
| - | |||
| - | === Description === | ||
| - | |||
| - | The devmatch infrastructure gives us a way to match up hardware with kernel modules that implement drivers that claim the hardware. One problem, however, is that these drivers need some modification before devmatch can use them. Specifically, | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ==== Command Line Editing, history and escape completion in Boot Loader ==== | ||
| - | |||
| - | | Mentors | [[WarnerLosh|Warner Losh]] < | ||
| - | | Skills | C (intermediate) and Lua (intermediate) | | ||
| - | | Duration | 175 Hours | | ||
| - | | Difficulty | Medium | | ||
| - | | Expected Outcome | Boot loader prompt that supports command line editing and history | | ||
| - | |||
| - | The current boot loader lacks any kind of command history and editing. This is because it was designed to be small. Now that UEFI has greatly expanded the limits, it makes sense to bring in functionality like this. This effort would involve creating a number of primitives for expansion, storing the history, etc. It would likely also require some lua integration to work. This project is one that has a lot of sub-parts, some of which may be omitted (eg command history w/o filename completion) and still result in good project. | ||
| ---- | ---- | ||
| Line 166: | Line 137: | ||
| ---- | ---- | ||
| - | ==== Complete FreeBSD' | + | ==== Implement |
| - | | Mentor | George V. Neville-Neil gnn@%%FreeBSD%%.org | | + | | Mentor | Alexander Chernikov < |
| | Skills | C (intermediate), | | Skills | C (intermediate), | ||
| - | | Mid-term deliverable | [[http:// | + | | Mid-term deliverable | MPLS forwarding works on static labels |
| | Duration | 350 hours | | | Duration | 350 hours | | ||
| | Difficulty | Medium | | | Difficulty | Medium | | ||
| - | | Expected Outcome | Full integration with net/frr LDP daemon and/or net/ | + | | Expected Outcome | MPLS forwarding, encap/decap works, MPLS labels can be programmed via Netlink |
| === Description === | === Description === | ||
| - | Multiprotocol Label Switching (MPLS) is data forwarding technology that increases the speed and controls the flow of network | + | Multiprotocol Label Switching ([[https:// |
| + | Roughly, the implementation can be split into the following chunks: | ||
| + | * create MPLS routing tables, analogous | ||
| + | * add the logic to handle MPLS packets (mpls_input(), | ||
| + | * add the code to perform MPLS encap for IPv4/IPv6 routes, extending nexthops functionality | ||
| + | * add Netlink support for working with IP-MPLS, MPLS-MPLS and MPLS-IP routes | ||
| + | * Add userland support for working with MPLS routes to route(8) and netstat(8) | ||
| + | * [stretch] add fast fib lookup module to enable high-performance concurrent label lookups | ||
| - | * [[http:// | + | The [[https:// |
| - | * [[RyanFrench/ | + | |
| - | + | ||
| - | This project should refresh and cleanup these works-in-progress. | + | |
| ---- | ---- | ||
| - | ==== Linuxulator on powerpc64 | + | ==== Improve netgraph concurrency |
| - | | Mentor | [[JustinHibbits|Justin Hibbits]] | + | | Mentor | Alexander Chernikov |
| - | | Skills | C (intermediate), | + | | Skills | C (intermediate), |
| - | | Duration | 175 hours | | + | | Mid-term deliverable | Traffic is able to pass in a lockless fashion in 2-node netgraph topology |
| + | | Duration | 350 hours | | ||
| | Difficulty | Medium | | | Difficulty | Medium | | ||
| - | | Expected Outcome | Simple Linux binary support on %%FreeBSD%%/ | + | | Expected Outcome | Traffic is able to pass in a lockless fashion between ng_%%<%%ppp%%|%%car%%|%%tee%%|%%iface>, |
| === Description === | === Description === | ||
| - | %%FreeBSD%% provides optional binary compatibility with Linux, allowing users to install | + | [[https:// |
| + | |||
| + | * Enable delayed reclamation | ||
| + | * Make core API like '' | ||
| + | * Test the implementation with a number of stateless nodes like ng_patch or ng_tee and ng_ipfw | ||
| + | * Evaluate and convert nodes on per-node basis on their reliance on the topology lock | ||
| ---- | ---- | ||
| - | ==== Implement | + | ==== Linuxulator on powerpc64 |
| - | | Mentor | [[AlexanderChernikov|Alexander Chernikov]] <melifaro@FreeBSD.org>, | + | | Mentor | [[JustinHibbits|Justin Hibbits]] <jhibbits@FreeBSD.org>, |
| - | | Skills | C (intermediate), | + | | Skills | C (intermediate), |
| - | | Mid-term deliverable | able to setup AF_NETLINK sockets and pass a request to the routing subsystem (NETLINK_ROUTE) | | + | | Duration | 175 hours | |
| - | | Duration | 350 Hours | | + | |
| | Difficulty | Medium | | | Difficulty | Medium | | ||
| - | | Expected Outcome | Routing daemon of choice (bird, | + | | Expected Outcome | Simple Linux binary support on %%FreeBSD%%/ |
| === Description === | === Description === | ||
| - | Netlink is widely used in Linux for many network-related kernel to userspace communications. Many apps require kernel netlink support to work, making them hard to port to %%FreeBSD%%. The goal of this project is to add Netlink | + | |
| + | %%FreeBSD%% provides optional binary compatibility with Linux, | ||
| ---- | ---- | ||
| Line 237: | Line 218: | ||
| ===== Userland projects ===== | ===== Userland projects ===== | ||
| - | |||
| - | ==== ELFToolChain improvements ==== | ||
| - | |||
| - | | Mentor | [[EdMaste|Ed Maste]] < | ||
| - | | Skills | C (intermediate) | | ||
| - | | Mid-term deliverable | LLVM bytecode support for ar/ | ||
| - | | Duration | 175 or 350 hours | | ||
| - | | Difficulty | Easy | | ||
| - | | Expected Outcome | Support archive files containing LLVM bitcode | | ||
| - | |||
| - | === Description === | ||
| - | |||
| - | The elftoolchain project provides %%FreeBSD%% with several commands for handling ELF executables, | ||
| - | |||
| - | Another potential task within the project would be to investigate the GNU binutils test suites for these tools and attempt to run them using the %%ELFToolChain%% equivalents, | ||
| ---- | ---- | ||
| - | ==== Kernel LLDB debugger module support and integration ==== | + | ==== Kernel LLDB debugger |
| | Mentor | [[EdMaste|Ed Maste]] < | | Mentor | [[EdMaste|Ed Maste]] < | ||
| Line 261: | Line 227: | ||
| | Mid-term deliverable | Parse and report the kernel module list in a coredump | | | Mid-term deliverable | Parse and report the kernel module list in a coredump | | ||
| | Duration | 175 or 350 hours | | | Duration | 175 or 350 hours | | ||
| - | | Difficulty | Easy | | + | | Difficulty | Moderate |
| | Expected Outcome | crashinfo functional with LLDB rather than kgdb | | | Expected Outcome | crashinfo functional with LLDB rather than kgdb | | ||
| Line 275: | Line 241: | ||
| | Mentor | ? | | | Mentor | ? | | ||
| - | | Skills | C (expert), fusefs (expert) | | + | | Skills | C++ or Rust (expert), fusefs (expert) | |
| | Mid-term deliverable | Read-only support for userland | | | Mid-term deliverable | Read-only support for userland | | ||
| | Duration | 350 hours | | | Duration | 350 hours | | ||
| Line 282: | Line 248: | ||
| === Description === | === Description === | ||
| - | |||
| - | %%FreeBSD%%' | ||
| **This project is challenging**: | **This project is challenging**: | ||
| Line 311: | Line 275: | ||
| Note: contributing to syzkaller requires signing the Google CLA. Please make sure that this is acceptable before attempting this project. | Note: contributing to syzkaller requires signing the Google CLA. Please make sure that this is acceptable before attempting this project. | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ==== Move to GENERIC armv7 distribution scripting ==== | ||
| - | |||
| - | | Mentor | [[WarnerLosh|Warner Losh]] < | ||
| - | | Skills | Shell / Make (intermediate) | | ||
| - | | Mid-term deliverable | release scripts working, u-boot ports updated | | ||
| - | | Duration | 175 hours | | ||
| - | | Difficulty | Medium | | ||
| - | | Expected Outcome | Documented and tested user tool to generate generic image | | ||
| - | |||
| - | === Description === | ||
| - | |||
| - | %%FreeBSD%% has grown support for a large number of boards over the past few years, far too many to release images for all of them. This project would convert the release tools to generate only a generic image that can have any supported u-boot port overlaid. the u-boot ports would need to be updated with meta-data that would describe how each %%SoCs%% or board' | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ==== Move to GENERIC armv7 distribution web interface ==== | ||
| - | |||
| - | | Mentor | [[WarnerLosh|Warner Losh]] < | ||
| - | | Skills | Shell / Make (intermediate) | | ||
| - | | Mid-term deliverable | scripts to mine u-boot ports and screen mock-ups | | ||
| - | | Duration | 175 hours | | ||
| - | | Difficulty | Medium | | ||
| - | | Expected Outcome | Working Web tool to mine u-boot | | ||
| - | |||
| - | === Description === | ||
| - | |||
| - | %%FreeBSD%% has grown support for a large number of boards over the past few years, far too many to release images for all of them. We need a way to securely distribute boot images for dozens or even hundreds of boards. The web app would collect user input, run a script to generate the image, sign the image with a secure signing key, then download the results to the user. This project could be combined with the release script project described above to creata a 350-hour project. | ||
| ---- | ---- | ||
| Line 465: | Line 399: | ||
| A rewrite in Python, using pytest, could fix all of these problems except the last. I have already written a proof of concept demonstrating the basic organization and key features like configurability and privilege modes. | A rewrite in Python, using pytest, could fix all of these problems except the last. I have already written a proof of concept demonstrating the basic organization and key features like configurability and privilege modes. | ||
| + | |||
| + | ---- | ||
| ===== Build infrastructure ===== | ===== Build infrastructure ===== | ||
| + | |||
| + | ---- | ||
| ==== Integrate MFSBSD into the release building tools ==== | ==== Integrate MFSBSD into the release building tools ==== | ||
| - | | Mentor | [[BradDavis|Brad Davis]] <brd@freebsd.org> | | + | | Mentor | ? (Email hackers@%%FreeBSD%%.org list for direction) |
| | Skills | C (beginner), make (intermediate), | | Skills | C (beginner), make (intermediate), | ||
| | Mid-term deliverable | 'make release' | | Mid-term deliverable | 'make release' | ||
| Line 485: | Line 423: | ||
| The issue is that only images for the release versions are usually produced, and MFSBSD tends to get out of sync with the tools in base. | The issue is that only images for the release versions are usually produced, and MFSBSD tends to get out of sync with the tools in base. | ||
| - | There is a desire to have MFSBSD images of the weekly snapshots of -current and -stable that are created by the release engineering | + | There is a desire to have MFSBSD images of the weekly snapshots of -current and -stable that are created by the release engineering |
| This requires that the process be automated as an additional target in the makefile in src/ | This requires that the process be automated as an additional target in the makefile in src/ | ||
| It would be similar to the process used now to generate VM images. | It would be similar to the process used now to generate VM images. | ||
| Line 491: | Line 429: | ||
| ---- | ---- | ||
| + | |||
| + | ==== Finish upstreaming bsd-user enhancements ==== | ||
| + | |||
| + | | Mentor | [[WarnerLosh|Warner Losh]] < | ||
| + | | Skills | C (intermediate) | | ||
| + | | Mid-term deliverable | All system calls into a patch stream for upstream, and can build packages with poudriere | | ||
| + | | Duration | 175 hours | | ||
| + | | Difficulty | Easy | | ||
| + | | Expected Outcome | All bsd-user changes from our fork are upstream | | ||
| + | |||
| + | === Description === | ||
| + | |||
| + | bsd-user is a set of modifications to the QEMU project. It is similar to the linux-user feature that's integrated into the QEMU project. Years ago, we forked our own tree, and had difficulty getting the changes at the time upstream. Since then, upstream attitudes have changed and they are very eager to get the bsd-user changes committed. | ||
| + | |||
| + | The current bsd-user fork is up-to-date with the latest qemu-project repo (as of the 7.2 release). The task here would be to break down the differences between our tree and upstream. | ||
| + | |||
| + | There' | ||
| + | (1) Changes to the binary loading. These are mostly the same upstream, but were originally based on linux-user. linux-user has evolved, but some of the relevant changes have not been merged over from linux-user. It is also desirable that refactoring the common items, like elf loading, could result in more code reuse and bsd-user' | ||
| + | (2) bsd-user has a number of architectures (powerpc, riscv and aarch64) that aren't in upstream today. These changes need to be broken down in to 50-100 line chunks, reviewed by the upstream and contributed to the maintainer to get into upstream. In addition, any adjustments or enhancements to the ABIs that have happened since the code was originally written may require adjustment to the current code. | ||
| + | (3) bsd-user only has about half of the system calls implemented in the fork upstreamed. These also need to be chunked into small patches that can be reviewed upstream. There are some system calls that are poorly placed as well and may need changes to bsd-user' | ||
| + | |||
| + | A successful project will result in all or most of the changes being upstreamed. The successful candidate will also need to understand where to find %%FreeBSD%%' | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== CI test harness for boot loader ==== | ||
| + | |||
| + | | Mentor | [[WarnerLosh|Warner Losh]] < | ||
| + | | Skills | shell-script or python (intermediate) | | ||
| + | | Mid-term deliverable | An end-to-end test for at least 2 of the %%FreeBSD%% boot environments | | ||
| + | | Duration | 175 hours or 350 hours | | ||
| + | | Difficulty | Medium | | ||
| + | | Expected Outcome | An end-to-end test for all %%FreeBSD%% boot environments that can be added to our CI infrastructure | | ||
| + | |||
| + | === Description === | ||
| + | |||
| + | %%FreeBSD%% can boot in about 40 different boot environments when you count all the combination of architecture, | ||
| + | and encryption. Currently, there' | ||
| + | |||
| + | A successful application will include the above matrix (send email to the Mentor before the deadline to ensure its correctness, | ||
| Mentors: use this as a template for new ideas: | Mentors: use this as a template for new ideas: | ||