Google Summer of Code 2013 Ideas

From ReactOS Wiki
Revision as of 23:17, 19 June 2013 by Drtgdgdfgdfgd (talk | contribs) (AHCI SATA Storage Driver)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

This page lists all project ideas for our Google Summer of Code 2013 application. Students should also visit our general GSoC 2013 page for more information including a Student Guide.

Hardware Compatibility

AHCI SATA Storage Driver

Implement a Windows-compatible AHCI driver (msahci.sys) for the NT 5.2 architecture. This driver would be unique in that it would bring a feature of Vista back to prior Windows versions and could be used both in ReactOS and Windows. Nearly all new machines feature AHCI controllers exclusively and the ability to fallback to IDE emulation will likely disappear over the coming years. Therefore, an AHCI driver is necessary for the project to ensure it can run on real machines in the present and future. This driver would be able to provide AHCI support for Windows versions before Vista like 2000, XP, 2003, and obviously ReactOS. This driver would also provide a fantastic test case for our SCSI Port driver which has nothing testing its PnP path as of now.

References
SCSI Port API: http://msdn.microsoft.com/en-us/library/windows/hardware/ff565353(v=vs.85).aspx
AHCI specification: http://www.intel.com/content/www/us/en/io/serial-ata/ahci.html
Universal ATA driver with PATA/SATA/AHCI support (opensource): http://alter.org.ua/soft/win/uni_ata/
Skills needed
Kernel-mode development
Familiarity with SCSI Port APIs

EFI Support

Support running and booting of ReactOS on EFI systems instead of BIOS systems. This would allow running ReactOS on Intel Macs and other systems that do not use BIOS. Support must be added to freeloader and the ReactOS HAL. Support for GPT is already present in the kernel but the disk.sys driver does not know how to handle it. Furthermore, freeloader is unable to boot from GPT partitions due to limitations in Arc name handling. Lack of the VGA BIOS must be addressed as the ReactOS boot process relies heavily on one being present for display during the boot process.

An installer must also be created that can write the boot record in a place where UEFI can find it.

Benefits
Ability to boot natively on Intel Macs would provide ReactOS with a relatively stable hardware platform for testing purposes thanks to Apple's hardware design philosophy. It would also present Mac users with another alternative to running Windows applications.
References
Unified Extensible Firmware Interface specifications: http://www.uefi.org/specs/ (or http://www.intel.com/technology/efi/)
UEFI SDK and test images: http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=Welcome
Skills Needed
Kernel, driver development experience.
Experience writing UEFI applications.

Intel High Definition Audio Bus Driver

Implement support for the Intel High Definition Audio specification for sound cards.

Benefits
Modern audio cards use the Intel High Definition Audio specification. Therefore they rely on a bus driver to communicate with the audio hardware. The goal is to write a bus driver which supports those new cards. The bus driver needs to work on a Microsoft NT system and with ReactOS.
References
HD Audio Device Driver Interface whitepaper: http://msdn.microsoft.com/en-us/windows/hardware/gg462966
Programming the HD Audio DDI: http://msdn.microsoft.com/en-us/library/ff536442%28v=vs.85%29.aspx
HD Audio Bus Drivers: http://msdn.microsoft.com/en-us/library/ff536434%28v=vs.85%29.aspx
Skills Needed
Kernel driver programming experience
Bus driver programming experience
Familiarity with Intel HD Audio specification
Audio kernel streaming

Interface Driver Stack

Implement support for the protocols such as Bluetooth or Firewire to allow ReactOS to communicate with compatible devices. Requirements would be a working set of device drivers and providing the corresponding API, with potential supplemental work including development of control panel applets or applications to expose the new functionality.

Benefits

This would open up possibilities such as data transfer to/from mobile devices, internet-over-cellphone scenarios or alternative input devices.

References
Bluetooth specifications https://www.bluetooth.org/Technical/Specifications/adopted.htm
Firewire specifications http://ieeexplore.ieee.org/xpl/mostRecentIssue.jsp?punumber=4659231
Microsoft Bluetooth API documentation: http://msdn.microsoft.com/en-us/library/aa362932(v=vs.85).aspx
Skills Needed
Familiarity with kernel development and Windows sockets

Networking

Internet Protocol Helper

Implement the Internet Protocol Helper API for manipulating network interfaces.

Benefits
Internet Protocol Helper API allows for retrieval and modification of network configuration settings. As well as notification to applications when network configuration is changed. This is important to allow network administration of the local computer.
References
http://msdn.microsoft.com/en-us/library/aa366071(v=vs.85).aspx
Skills Needed
Familiar with windows network and TCP/IP networking.

SSH Service

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 commandline 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

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.

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
http://www.reactos.org/wiki/ReactOS_Terminal_Services
Skills Needed
Network development experience.
Driver development experience.
Knowledge/familiarity with RDP protocol.

System Enhancements

Audio Mixer

Implement support for mixing of audio streams.

Benefits
Audio mixer is responsible for routing of multiple audio streams. This would be very beneficial to ReactOS as audio driver support has improved yet the use of these drivers is limited by the lack of an Audio Mixer. In the end of the project multiple audio streams should be able to be played at the same time.
References
Audio Mixer Reference: http://msdn.microsoft.com/en-us/library/ms705739(v=vs.85).aspx
DirectKS Sample Application download: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=D7667686-8467-4B10-8713-BF0281536320&amp%3Bdisplaylang=en
Programming Services: http://msdn.microsoft.com/en-us/library/ms685967%28v=VS.85%29.aspx
"Secret Rabbit Code" (SRC) Sample Rate Converter: http://www.mega-nerd.com/SRC/
Skills Needed
Windows Services familiarity
Basic Audio file format familiarity
Audio mixing algorithms / libraries familiarity
Basic kernel streaming familiarity

IFS Wrapper Driver

NT IFS drivers for alternate filesystems are relatively scarce, due partially to the complexity of the IFS interface and the lack of documentation for several years. A FUSE implementation for Windows is also not ideal compared to a genuine kernel mode IFS driver. A kernel mode wrapper IFS driver can however considerably ease development of filesystem drivers on Windows. A demonstration implementation using code derived from NTFS-3G would provide the foundation for future drivers for other non-Windows filesystems and also a testbench for ReactOS’ own filesystem library interface.

Benefits
Future efforts to allow Windows NT to read/write to other filesystems such as ZFS would be considerably eased with a wrapper driver.
References
Installable File System Design Guide: http://msdn.microsoft.com/en-us/library/ff548143(v=VS.85).aspx
Installable File System Kit Samples: http://msdn.microsoft.com/en-us/library/ff548099(v=VS.85).aspx
NTFS-3G driver & library: http://www.tuxera.com/community/ntfs-3g-download/
Skills Needed
Driver development experience.
Filesystem development experience.

Performance Data Registry

Access to performance data on Windows is done primarily through the registry API, accessing something known as the performance data hive. This hive does not exist as a genuine file but is in reality a collection of data exported by various OS components, drivers, services, and even applications. Many of the performance values provided through the performance data registry is not available in any other form. The absence of support for performance counters renders many diagnostic utilities from Microsoft broken and is also an impediment to application compatibility. Condor is an example of a third party application that uses the performance data registry for process and resource usage tracking.

Benefits
Besides application compatibility, the performance data registry is one of the most difficult to use public interfaces in Windows. The layout of its data structures makes querying and accessing values a highly manual process. Documentation produced from this effort would provide better guidelines for third parties to access the performance data registry and better use the information published by the system and Microsoft's own applications such as the .NET runtime or the IIS service.
References
Description of performance counters and types in Windows 2003: http://technet.microsoft.com/en-us/library/cc776490%28WS.10%29.aspx
Performance counter data structures: http://msdn.microsoft.com/en-us/library/aa373093%28v=VS.85%29.aspx
Example code for accessing performance data through registry: http://msdn.microsoft.com/en-us/library/aa373219%28v=VS.85%29.aspx
Skills Needed
Registry API familiarity.
Performance registry structure familiarity.
Performance counter familiarity.

Security Controls

Implement support for user permissions based on Access Control Lists.

Benefits
This will allow separation of users into groups and better control over user privileges in ReactOS. Security controls will then allow supporting multiple users on the same system.
Skills Needed
Familiarity with Windows security and permissions models.

Management Console

Implement Microsoft Management Console (MMC). The MMC provides an interface for various management tools, both from Microsoft and third parties, called snap-ins. These snap-ins are standalone programs dynamically loaded into an MMC console to perform a specific configuration task, such as configuring a network or managing disk drives.

Benefits
Easier snap-ins development.
Consistent user interface of management tools.
One configurable place to access key management and configuration apps.
References
What is MMC: http://msdn.microsoft.com/en-us/library/bb756943.aspx
Developing for MMC 3.0: http://msdn.microsoft.com/en-US/library/bb756923.aspx
Skills Needed
Basic Windows development experience.
Knowledge of COM.

UI Enhancement

Finish shell32 Implementation

The old explorer implementation is an aging C++ codebase which is more a combination of the explorer shell and the shell32 library. This project is to finish the new shell32 library to allow for use of explorer_new in ReactOS, a requirement for the 0.4.0 release (http://www.reactos.org/wiki/Roadmap). The project will consist of getting the new explorer running in ReactOS.

Skills Needed
COM knowledge
Shell32 knowledge
Win32 API familiarity

GUI 1st Stage Installer

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.

Layered Windows

Implement support for layered windows. Drawing operations to layered windows are redirected to a bitmap residing in memory. When a window needs to be repainted, the bitmap is copied onto the screen.

Benefits
Layered windows provide an efficient way to achieve complex effects like shadows. The stock menus provided to all applications use layered Windows to achieve the shadowing effect one sees and the current iteration of Windows Live Messenger relies on layered windows to achieve partial transparency.
References
http://msdn.microsoft.com/en-us/library/ms997507.aspx
http://blogs.msdn.com/b/dwayneneed/archive/2008/09/08/transparent-windows-in-wpf.aspx
Skills Needed
Windows display driver development experience.

Win32 Subsystem

Implement metafile support

While wine has this part of GDI32 fully implemented, the code cannot easily be reused. The task would be to analyze the wine code and design a solution that makes use of existing wine code as much as reasonable and implement the missing parts.

Skills Needed
Basic knowledge of the win32 graphics interface (GDI)
Basic knowledge of (enhanced) metafiles at API level
Capabilities to analyze existing code and design architecturally complex solutions

Rewrite win32k line drawing functions

The low level line drawing functions in win32k are insufficient in features, not conforming to Windows requirements and lacking in code correctness aspects. The task is to write a new set of low level line drawing functions, with focus on graphical correctness, safety and performance where reasonable. The functionality is described in MSDN and in DDK sample source code. The latter can be used as reference and to a certain extent possibly as direct source of code (Windows XP DDK license allows reuse under GPL)

Skills Needed
Knowledge in basic graphics algorithms (Bresenham, ...)
Skills in developing algorithms
Basic knowledge of the win32 graphics interface (GDI)
Beneficial, but not required: knowledge of the windows display driver interface (DDI)

Wine-based Win32 subsystem (Arwinss)

There is a proof of concept done which shows the possibility to reuse majority of Wine code for implementing user32.dll, gdi32.dll and win32k.sys, which would be binary compatible enough to ultimately work even in native Windows. However, the Arwinss branch is based on an now old Wine architecture and old ReactOS GDI code. The goal of this task would be to "update" Arwinss branch to the newest Wine 1.4 architecture (including DIB engine and other changes), bring in changes from ReactOS win32k graphic code which happened after Arwinss was last updated, find the source and fix a well defined set of Arwinss-specific bugs, conduct a performance review and estimate performance improvements strategies (optional, if time allows).

Benefits
Greatly superior application compatibility level
Improved usability
References
http://www.reactos.org/wiki/Arwinss
Skills Needed
Good knowledge of C language
Familiarity with Win32 and GDI APIs
Generic knowledge of Windows NT architecture
Knowledge of core principles of Wine architecture

Durability

Kernel mode test suite

Improve our existing kernel mode test suite 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 behaviour could be checked by running the test suite on original Windows operating system.

Benefits
Improved system stability.
More information about undocumented behaviour.
Improved compatibility with third party drivers.
Skills Needed
Native API knowledge
NT driver development skills