Google Summer of Code 2016 Ideas
This page lists all project ideas for our Google Summer of Code 2016 application. Students should also visit our general GSoC 2016 page for more information including a Student Guide.
Contents
Your idea!
We are eager to hear about your proposal to improve either ReactOS or its infrastructure. Come and propose your project on ReactOS developers mailing-list or on IRC, to get a feedback about its feasability. If your project is doable, we will be glad to provide you a mentor so that you can succeed in your project.
Don't forget that ReactOS is a big project and application fields are wide. You can choose between user-mode, kernel-mode developer. But also between application, or dll/driver developer. Or between working on ReactOS itself or on extra tools used by developers for their daily work on ReactOS. And in the end, if all you prefer is web development, we also have needs there.
- Skills needed
- Yours
- Difficulty
The one you'll have set
- Extras
You'll be working on your own project and be able to choose its direction along with your mentor :-).
Drivers
TCP/IP Driver
Useful for: End-users
Currently, ReactOS implements TCP/IP driver using lwIP library. However, having an own TCP/IP implementation which does not rely on "heaps of hacks" around existing implementation/libraries would be of great benefit. The new driver needs to be developed as drop in replacement for Windows tcpip.sys which would allow to thoroughly test the implementation in a running Windows environment and fix possible compatibility issues in ReactOS.
- Benefits
- Get rid of thirdparty library dependency
- Better source code
- Better compatibility and/or performace
- References
- Needed Skills
- Windows Networking stack knowledge
- TCP/IP protocol tech knowledge
- Extra
Make the performance of a new tcpip.sys in Windows better than its native driver. Ambitious, but fun.
NT "Wine audio" driver
Useful for: End-users
Currently, ReactOS imports mmdevapi DLL from Wine, but it doesn't have a "driver" for it. In Wine, the driver is an implementation of various COM interfaces on top of libraries such as ALSA or OSS. However, it is perfectly possible to implement such a driver for Windows NT (preferably Vista+) using audio IOCTL to directly talk to the windows device.
- Benefits
- Vista+ compatible sound stack (our portcls.sys is already there)
- Importing the latest Wine audio related libraries becomes possible (winmm, mmdevapi, dsound, etc.)
- One place to rule them all: the only direct interface between user mode and driver.
- References
- Needed Skills
- Windows Audio Stack knowledge
- COM knowledge
NTFS driver improvements
Useful for: End-users and developers
During the last spring, NTFS support was finally added in ReactOS. If it was a major step forward, it still requires huge amount of work. It was implemented without caching support, and some features of NTFS are also totally ignored. We are looking for students willing to discover one of the most used file system and to improve its supports in ReactOS. There are various options offered to students: either work on improvements for RO support and/or start implementing RW features.
- Benefits
- Allowing ReactOS to interact with volumes managed in recent Windows
- Perhaps allowing ReactOS to have a journaled system
- References
- Various documents on the Internet (including MSDN)
- Windows Internals books
- NTFS-3G FUSE driver
- Needed Skills
- Kernel world knowledge
- FUSE dev knowledge might be a plus
Networking
Integrating SMB into ReactOS
Useful for: End-users and developers
SMB/CIFS is omnipresent for file sharing under Windows. It's one of the features new users to ReactOS always expect and then cannot find anywhere.
As such, ReactOS finally needs an implementation of SMB properly integrated into the operating system. SMB heavily relies on RPC and UNC pathes and previous work in both areas exists. A potential developer should base the work on the mature Samba Open-Source implementation of SMB. However, Samba is developed for UNIX systems and therefore parts of its code require careful porting to create a native implementation for ReactOS.
- Benefits
Having SMB would highly improve ReactOS' abilities to transfer files over the network, both for users and developers! It would also lay the ground for other Windows network services such as Printer Sharing.
- References
- Samba Wiki
- MS-SMB Server Message Block (SMB) Protocol Open Specification (and related ones on this site)
- Needed Skills
- Software Development in C and under Windows
- Familiarity with Win32 APIs and Networking
- Experience with glueing code of different projects together
NFS Client
Useful for: End-users and developers
It would be beneficial for ReactOS and Windows users to have the ability to access other servers using NFS. For this project, a readonly command line implementation would be enough.
- Benefits
That would allow ReactOS (and also Windows) to access NFS sharepoints.
- References
RFCs! 1094, 1813, 3530
- Skills needed
- Network development experience.
- Knowledge/familiarity with NFSv4 protocol or desire to learn it; shouldn't be that hard.
SSH Service
Useful for: End-users and developers
Implement a native Windows service for accepting SSH connections and authenticating with Windows accounts to allow the user to interact with Windows through the command prompt should they not need access to the GUI shell. Once authenticated, any commands passed through SSH are executed using the user's credentials to prevent abuse of the service's privileges. And as the user is not technically logged in, there are no restrictions with respect to how many connections are permitted except as system resources allow.
- Benefits
- Besides cygwin, few options are available for users who wish to remote into a Windows machine for simple command line access. Cygwin is also horrendously intrusive on Windows systems. This implementation would provide a free SSH server implementation for Windows that was designed to integrate cleanly and present users with access to the Windows command shell, not try and lie to the user and pretend they are in a Unix environment. As a remote administration tool, this opens Windows systems to considerably more flexibility for connecting to and managing them. Administrators on Linux systems will also not need to relax security settings on Windows in order to use Linux RDP clients.
- Skills Needed
- Network development experience.
- Knowledge/familiarity with SSH protocol.
Terminal Services
Useful for: End-users and developers
Implement support for terminal services, allowing inbound remote desktop connections to ReactOS. This encompasses implementation of input and video drivers to handle output over the network.
The terminal services system provides functionality for securely connecting remote clients and servers, for channeling communication between components of remote clients and servers, and for managing servers. It implements the Remote Desktop Protocol (RDP) which is a multi- channel protocol that allows users of a remote client to connect to a server over a network.
- Benefits
- Terminal services support would allow ReactOS to service as a terminal server/thin client server. Organizations that wish to provide a shared workstation with Windows would have a free alternative that does not have complex licensing terms covering multi-session usage. The display driver for terminal services can also be used to support fast user-switching and even possibly multi-monitor support.
- References
- Skills Needed
- Network development experience.
- Driver development experience.
- Knowledge/familiarity with RDP protocol.
Durability
Kernel mode test suite
Useful for: Developers
Improve our existing kernel mode test suite (created by a previous successful GSoC student) by adding comprehensive new tests in areas previously untouched by the test suite like the kernel caching APIs and PnP. The goal is to extensively test Native API functions exported by the kernel. Reference behavior could be checked by running the test suite on original Windows operating system.
- Benefits
- Improved system stability.
- More information about undocumented behavior.
- Improved compatibility with third party drivers.
- Skills Needed
- Native API knowledge
- NT driver development skills
Win32k test suite
Useful for: Developers
Right now we have basically no tests that cover the win32k module. As win32k is the cornerstone of the interface between the Win32 Subsystem and the display drivers, lack of tests leads to inconsistency, guess work and frustration when it comes to improving driver compatibility. A virtual display driver (à la kmtest.sys) allows us to test the functionality and behavior of win32k. If time permits, it would also be possible to add a mechanism to test videoprt.sys functionality, and the relationship between a display driver and its miniport counterpart.
- References
- Benefits
- Improved stability.
- More information about undocumented behavior.
- Improved compatibility with third party drivers.
- Needed skills
- Display drivers development experience
- Win32 API knowledge
Usability enhancement
Applications Manager Rapps
Useful for: End-users
RAPPS is a lightweight GUI utility which downloads and installs various popular apps and redistributable packages in Windows and ReactOS. It can be significantly improved to become a really useful tool for not only for ReactOS but for Windows users also who want to manage their installed applications like Steam manages games installation/updating.
A list of features to be implemented:
- Adding command line parameters support to RAPPS. For example: "rapps install chrome" (just like your favourite Linux distro package manager) or "rapps remove msvc2010_redist"
- Separate download and install, so that a user could choose just to download the apps into a local cache and later install some or all of them (just like Steam does Download, then it asks to Install, or NVidia driver updaters for example)
- Automatically "install" simple apps by unpacking the archive they come in and execute a script inside it (if any) which creates shortcuts on the desktop
- Skills needed
- WinAPI
- C language
- Difficulty
Medium
- Extras
A chance to work on an app potentially used by many people throughout the world
GUI 1st Stage Installer
Useful for: End-users
To make ReactOS more user friendly for installation, a GUI installation instead of a rather limited text-mode installer is needed. This could be run off of the LiveCD and act as a frontend to the disk formatter and installer we already have implemented.
- Benefits
- Having a GUI installer would allow the project to merge the bootcd and LiveCD and ensure that the LiveCD gets more testing to make sure it is not broken and simply neglected. A GUI installer would also be less intimidating to new users, especially those used to Vista or 7's installer.
- Skills Needed
- Win32 API familiarity.
- Partitioning and setup experience.
Enhancing web presence of ReactOS
Implement a REST API in testman
Useful for: Developers
For its development, ReactOS project has been using with success for years a complete tools set. Each time a commit is made to our trunk, our buildbot infrastructure (https://build.reactos.org) is in charge of rebuilding trunk and starting a bunch of tests (circa 10M tests) on it to make sure not regressions came in. When these tests are done, they are uploaded to testman (https://www.reactos.org/testman), which makes them properly readable and usable for developers. Over years, the question of being able to catch more or less automatically regressions patterns was raised. Also, regtests provide a good performance indicator for ReactOS and evaluating their performances over commits can be critical as well.
There is then a need to be able to directly query Testman via an API to gather the raw data (tests, time to perform then) so that more tools can make use of these results. The student would then have the responsibility to implement such an API into testman directly.
- Skills needed
- PHP/MySQL development
- REST API development
- Difficulty
The project in itself shouldn't be difficult. Testman is a well-known product develop in-house. But a deep attention will have to be set on security and the performances of the API.
- Extras
If the student goes fast enough, we will be able to extend this project, by for instance looking at how to develop a skeleton application to make use of the API. Or to directly develop a complete application to evaluate the performances of the tests over time.