Google Summer of Code 2015: Difference between revisions

From KolibriOS wiki
Jump to navigation Jump to search
(Created page with "== Introduction == KolibriOS is going to apply as a mentoring organization for [http://www.google-melange.com/gsoc/homepage/google/gsoc2015 Google Summer of Code 2015]. This p...")
 
m (Protected "Google Summer of Code 2015": Remains here for historical purposes only ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite)))
 
(44 intermediate revisions by 3 users not shown)
Line 1: Line 1:
[[Image:GSoC2015.png|right]]
== Introduction ==
== Introduction ==
KolibriOS is going to apply as a mentoring organization for [http://www.google-melange.com/gsoc/homepage/google/gsoc2015 Google Summer of Code 2015]. This page contains our ideas list and some additional information for students and mentors.
KolibriOS is going to apply as a mentoring organization for [http://www.google-melange.com/gsoc/homepage/google/gsoc2015 Google Summer of Code 2015]. This page contains our ideas list and some additional information for students and mentors.
We have previously participated as a Mentoring Organization in [http://www.google-melange.com/gsoc/homepage/google/gsoc2014 Google Summer of Code 2014]. The [[Google Summer of Code 2014|ideas page for 2014]] is available for your reference. Our organization page for GSoC 2014 and successfully completed projects for that year can be accessed [https://www.google-melange.com/gsoc/org2/google/gsoc2014/kolibrios via this link]. To our great delight, both successful students of GSoC2014 stayed with the project and continue contributing to KolibriOS voluntarily in their spare time.
In 2013, we have run an [[KolibriOS Summer of Code 2013|independent Summer of Code]] using money we [http://www.kickstarter.com/projects/kolibrios/kolibrios-help-us-hold-our-own-summer-of-code-2013 collected with Kickstarter]. Two students have worked on KolibriOS, and the results of 2013 Summer of Code were: adding write support for EXT2 filesystem, and adding (read-only) support for XFS filesystem.


== Student Requirements ==
== Student Requirements ==
Line 7: Line 12:
# Full Name (First + Last Name).
# Full Name (First + Last Name).
# E-mail address.
# E-mail address.
# Phone (home or mobile).
# Another phone '''for emergency cases''' (if we cannot contact you) - parents, boy/girlfriend, husband/wife etc.
# Nickname you plan to use on our forums, SVN repository or IRC chat.
# Nickname you plan to use on our forums, SVN repository or IRC chat.
# Age.
# Age.
# Country + city of residence.
# Country + city of residence.
# Human languages you speak (write all languages and knowledge level - basic/intermediate/expert/mother tongue).
# Human languages you speak (state all languages and knowledge level - basic/intermediate/expert/mother tongue).
# Name of college or university you are accepted into or enrolled in + link to their website.
# Name of college or university you are accepted into or enrolled in + link to their website.
# Name of program (or faculty, or department) in that college/university you are accepted into or enrolled in.
# Name of program (or faculty, or department) in that college/university you are accepted into or enrolled in.
Line 16: Line 23:
# Have you been involved with any open-source project in the past? If yes, which one, and what have you done for that project?
# Have you been involved with any open-source project in the past? If yes, which one, and what have you done for that project?
# Code samples - please provide links to code that you have written. It can be your high school project, contribution to open-source organization, your college/university task or anything like that.
# Code samples - please provide links to code that you have written. It can be your high school project, contribution to open-source organization, your college/university task or anything like that.
# The task you are willing to work on from our list of Summer of Code 2015 ideas (or suggest your own idea, if you don't like any of the proposed ideas).
# The task you are willing to work on from our list of Summer of Code 2015 ideas (or suggest your own idea, if you don't like any of the proposed ideas). Please provide an approximate work plan for your task split to 1-week intervals, as well as expected outcome of your work. '''This point should be detailed as much as possible, as your application would be evaluated mainly based on what you write here.''' You are welcome (and even encouraged!) to collaborate with potential mentors on this paragraph.
# What other time commitments, such as school work, another job, planned vacation, etc., will you have between May 19 and August 18?
# What other time commitments, such as school work, university studies, another job, planned vacation, etc., will you have between May 25 and August 21 (coding period)? Please be as specific as possible. ''Bear in mind that GSoC is like a full-time job, so if you consider taking a summer semester at the university (with more than 1-2 courses), or intend to perform an internship or work elsewhere during the summer in addition to GSoC, you will likely be '''NOT''' accepted.''


== Organization ==
== Organization ==
Line 46: Line 53:
|}
|}
We have discussed "Google Summer of Code 2015" application with all active members of the KolibriOS Project Team, and selected only those 3 (three) people who have both the knowledge, the dedication, and the time to help their students during the entire summer. Each one of them was assigned to mentor projects in his area of specialization only. In a rare event when a Mentor from the above list cannot continue mentoring his student(s) due to personal circumstances, we will try to find a replacement Mentor, or ask the remaining Mentors to cover for the missing one. Additionally, there is always a number of knowledgeable members of our team hanging around our [http://board.kolibrios.org/chat.php forum chat], and they will gladly answer any student questions that may arise, even if they haven't volunteered as Mentors themselves.
We have discussed "Google Summer of Code 2015" application with all active members of the KolibriOS Project Team, and selected only those 3 (three) people who have both the knowledge, the dedication, and the time to help their students during the entire summer. Each one of them was assigned to mentor projects in his area of specialization only. In a rare event when a Mentor from the above list cannot continue mentoring his student(s) due to personal circumstances, we will try to find a replacement Mentor, or ask the remaining Mentors to cover for the missing one. Additionally, there is always a number of knowledgeable members of our team hanging around our [http://board.kolibrios.org/chat.php forum chat], and they will gladly answer any student questions that may arise, even if they haven't volunteered as Mentors themselves.
Mentors selected for this year are the same that were originally proposed for last year, and they have already proved to be responsible, helpful and knowledgeable during GSoC2014.


== Ideas for Google Summer of Code 2015 ==
== Ideas for Google Summer of Code 2015 ==
Line 51: Line 60:
Students are welcome ('''and even encouraged''') to suggest their own ideas for GSoC, provided they can find a mentor amongst KolibriOS developers to guide them.
Students are welcome ('''and even encouraged''') to suggest their own ideas for GSoC, provided they can find a mentor amongst KolibriOS developers to guide them.


=== QR-code in boot log ===
=== Sortable list of ideas for easy navigation ===
'''Summary:''' Add a [http://en.wikipedia.org/wiki/QR_code QR-code] (containing the debug log) at the end of boot process
{| class="wikitable sortable" border="1"
|-
! Idea Name
! Area
! Required Skill Level
! Importance for KolibriOS
! Programming Language
! Mentor
|-
| [[#XDXF_dictionary|XDXF dictionary]]
| Application
| Basic
| Low
| Assembler(FASM)
| dunkaist
|-
| [[#CPUID_tool|CPUID tool]]
| Application
| Beginner
| Low
| Assembler(FASM)
| dunkaist
|-
| [[#FTP_client|FTP client]]
| Application
| Basic
| Medium
| Assembler(FASM)
| hidnplayr
|-
| [[#Torrent_client|Torrent client]]
| Application
| Advanced
| High
| Assembler(FASM)/C/C++
| hidnplayr
|-
| [[#XMPP.2FJabber_client|XMPP/Jabber client]]
| Application
| Intermediate
| Medium
| Assembler(FASM)
| dunkaist
|-
| [[#Music_player|Music player]]
| Application
| Advanced
| Medium
| Assembler(FASM)/C/C++
| dunkaist/hidnplayr
|-
| [[#Web_browser:_WebView|Web browser: WebView]]
| Application
| intermediate
| Standard
| [http://www.dev0.de/cmm/indexe.htm Sphinx C--]
| punk_joker/hidnplayr
|-
| [[#Ethernet_driver.28s.29|Ethernet driver(s)]]
| Driver
| Advanced
| High
| Assembler(FASM)
| hidnplayr
|-
| [[#SD_Host_Controller|SD Host Controller driver]]
| Driver
| Advanced
| Low
| Assembler(FASM)
| dunkaist
|-
| [[#USB_devices|USB device drivers]]
| Driver
| Expert
| High
| Assembler(FASM)
| hidnplayr
|-
| [[#Filesystem_support|Filesystem support]]
| Driver
| Expert
| High
| Assembler(FASM)
| dunkaist
|-
| [[#Unicode_support|Unicode support]]
| System wide task
| Intermediate
| Critical
| Assembler(FASM)
| dunkaist
|-
| [[#Widget_toolkit|Widget toolkit]]
| System wide task
| intermediate
| Standard
| Assembler(FASM)
| dunkaist
|-
| [[#Unit_testing_framework|Unit testing framework]]
| System wide task
| intermediate
| High
| Any
| dunkaist
|-
| [[#QR-code_in_boot_log|QR-code in boot log]]
| Kernel/Library
| Basic
| Medium
| Assembler(FASM)
| dunkaist
|}
Explanation of required skill level:
* Beginner: No knowledge at all of the topic,
* Basic: A very basic knowledge of the topic but no professional usage,
* Intermediate: A basic knowledge of the topic but no regular professional usage,
* Advanced: A good knowledge of the topic and a regular professional usage,
* Expert: a perfect knowledge of the topic and a daily professional usage.
 
Explanation of importance for the project:
* Low: For sure it doesn't hurt to implement, but if nobody does it, no one will even notice.
* Medium: Nice-to-have feature. Will improve everyday life of users and developers.
* High: This feature is needed for the project to start being adopted by masses.
* Critical: This functionality is vital for the project to become useful.
 
=== Applications ===
These are userspace tasks. They often require only basic knowledge of algorithms and data structures.<br>
No specific experience is required but welcome.


[[File:QR-code.png]]
==== XDXF dictionary ====
'''Summary:''' Write dictionary application with support of XDXF (XML Dictionary eXchange Format)


'''Details:'''
'''Details:'''
* Description: Sometimes KolibriOS cannot boot on a certain hardware configuration (gets stuck during or after boot process). In such cases, we request the user having this problem to enable debug log at boot time, take a photo of the screen and show it to us (in the forum). However, sometimes taking a good quality photo can be quite challenging (bad camera, shaking hands etc.) and the attached photo is so blurry to the point the debug log cannot be even read. The idea suggested hereby is to simultaneously encode the debug log which is outputted on the screen, to the form of QR-code, and [http://wiki.kolibrios.org/wiki/File:QR-code.png show the resulting QR-code on empty space on the screen]. In such way, any user possessing a smartphone with a camera and QR-code scanner, could scan the QR-code and submit the encoded text directly on our forums (without having a need to take a photo), and our developers, in turn, would get the debug log text immediately and won't have to unscramble a blurry photo.
* Primary goal: Write library and corresponding dictionary application
* Additional goal: Support of other dictioinary formats
* Language: Assembler/FASM
* Language: Assembler/FASM
* Skill level: beginner/intermediate
* Skill level: intermediate
* Suggested by: People on [http://habrahabr.ru/company/kolibrios/blog/ habrahabr.ru]
* Importance: Standard
* Mentor: dunkaist
* Mentor: dunkaist
* Links: [http://tibleiz.net/asm-xml/ fasm xml library], [https://en.wikipedia.org/wiki/XDXF XDXF format]


=== Torrent client ===
'''Summary:''' Write a (bit-)torrent client for KolibriOS


'''Details:'''
==== CPUID tool ====
* Primary goal: Implement a torrent client similar to [http://www.utorrent.com/ µTorrent Free edition]
'''Summary:''' Update existing CPUID application to be aware of new CPUs and their features
* Language: Assembler/FASM
* Skill level: intermediate/advanced
* Suggested by: People on IRC
* Mentor: hidnplayr
 
=== Filesystem support ===
'''Summary:''' Improve filesystem support in KolibriOS


'''Details:'''
'''Details:'''
* Primary goal: Add Read-only support for the UDF filesystem.
* Primary goal: Write code to detect and report new CPUs and features
* Additional goal #1: Add Write support for the UDF filesystem
* Additional goal: Refactor code as to use system libraries (libimg, box_lib, etc.)
* Additional goal #2: Add Write support for the NTFS filesystem (read-only support already exists)
* Language: Assembler/FASM
* Language: Assembler/FASM
* Skill level: intermediate/advanced
* Skill level: beginner/intermediate
* Suggested by: dunkaist
* Importance: Standard
* Mentor: dunkaist
* Mentor: dunkaist
* Links: [http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fsystem%2Fcpuid%2Ftrunk%2F&#aec5d374b78ae8f08110b3327c3ba5f56 CPUID program], [http://bochs.sourceforge.net/techspec/24161821.pdf Intel cpuid], [http://support.amd.com/TechDocs/25481.pdf AMD cpuid]


=== FTP client ===
==== FTP client ====
'''Summary:''' Create a GUI based FTP client or add FTP support to one of the existing file managers
'''Summary:''' Create a GUI based FTP client or add FTP support to one of the existing file managers


'''Details:'''
'''Details:'''
* Primary goal: FTP access (download/upload/etc.)
* Primary goal: FTP access (download/upload/etc.)
* Additional goal: Create an FTP client library.
* Additional goal: Create an FTP client library
* Language: Assembler/FASM
* Language: Assembler/FASM
* Skill level: beginner/intermediate
* Skill level: beginner/intermediate
* Suggested by: hidnplayr
* Importance: High
* Mentor: hidnplayr
* Mentor: hidnplayr
* Links: [https://www.ietf.org/rfc/rfc959.txt File Transfer Protocol (RFC959)], [http://board.kolibrios.org/viewtopic.php?f=40&t=2360 CLI FTP client (demo)]


=== Improve Ethernet support ===
==== Torrent client ====
'''Summary:''' Write more Ethernet drivers.
'''Summary:''' Write a (bit-)torrent client for KolibriOS, or port an existing one


'''Details:'''
'''Details:'''
* Primary goal: Support for popular Broadcom, Atheros and/or Marvell Yukon cards. (pick 2)
* Primary goal: Implement a torrent client similar to [http://www.utorrent.com/ µTorrent Free edition]
* Additional goals: Any Ethernet cards students and their mentors find.
* Alternative goal (less preferred, but still possible): Port an existing torrent client to KolibriOS
* Language: Assembler/FASM
* Language: Assembler/FASM
* Skill level: intermediate/advanced
* Skill level: intermediate/advanced
* Suggested by: hidnplayr
* Importance: High
* Mentor: hidnplayr
* Mentor: hidnplayr


=== FT232R driver ===
==== XMPP/Jabber client ====
 
'''Summary:''' Write a XMPP/Jabber library and client for KolibriOS
'''Summary:''' Write or port a FT232R (USB to serial UART interface IC) driver.


'''Details:'''
'''Details:'''
* Description: FT232R is a popular USB to serial UART interface integrated circuit. It is used in cellular phone USB data transfer cables, MCU and FPGA based boards (such as Arduino), modems, MP3 players, digital cameras, smart card readers, PDAs etc.
* Primary goal: Write basic xmpp library/client
* Primary goal: Implement a VCP (Virtual COM Port) driver and a test application to communicate with some device by means of FT232R IC (Arduino for example).
* Additional goal: Implement some xmpp extentions
* Additional goals:
: * Write an application for uploading sketches to Arduino.
: * Implement a D2XX driver (for direct access to the USB device).
* Language: Assembler/FASM
* Language: Assembler/FASM
* Skill level: Intermediate.
* Skill level: intermediate/advanced
* Suggested by: Albom
* Importance: High
* Mentor: hidnplayr
* Mentor: dunkaist
* Links: [http://xmpp.org/xmpp-protocols/rfcs/ XMPP spec], [http://xmpp.org/xmpp-protocols/xmpp-extensions/ XMPP extentions]
 


=== Music player ===
==== Music player ====
'''Summary:''' Improve the current music player in Kolibri.
'''Summary:''' Improve the current music player in Kolibri


'''Details:'''
'''Details:'''
* Primary goal: Rewrite the current music player (ac97snd), in FASM, and improve its functionality.
* Primary goal: Rewrite the current music player (ac97snd), in FASM, and improve its functionality
: * Support for file formats wav, mp3 and xm (using available external libraries).
: * Support for file formats wav, mp3 and xm (using available external libraries)
: * Support for playlists (m3u).
: * Support for playlists (m3u)
: * A time display.
: * A time display
* Additional goals:
* Additional goal:
: * Use of system wide hotkeys to control player
: * Use of system wide hotkeys to control player
: * Support for metadata (ID3, ...)
: * Support for metadata (ID3, ...)
Line 142: Line 274:
* Language: Assembler/FASM (C/C++ to port codec)
* Language: Assembler/FASM (C/C++ to port codec)
* Skill level: intermediate/advanced
* Skill level: intermediate/advanced
* Suggested by: hidnplayr
* Importance: High
* Mentors: hidnplayr / dunkaist
* Mentors: hidnplayr / dunkaist
* Links: [http://board.kolibrios.org/viewtopic.php?f=38&t=1596 AC97SND (MP3 player in C)], [http://board.kolibrios.org/viewtopic.php?f=28&t=317 Sound drivers and architecture], [http://board.kolibrios.org/viewtopic.php?f=38&t=3003 Flac decoder],[http://board.kolibrios.org/viewtopic.php?f=38&t=2220 Minimp3 (minimalistic mp3 decoding library)], [http://board.kolibrios.org/viewtopic.php?f=38&t=161 SuperMP3 (IDv3 tag demo)]


=== Web browser: Netsurf ===
==== Web browser: WebView ====
'''Summary:''' Complete porting of [http://www.netsurf-browser.org/ NetSurf] browser for KolibriOS
'''Summary:''' Improve existing text-only web browser WebView - add more functionality and compatibility


'''Details:'''
* Primary goal: Have mostly complete HTML4 support on a good enough level to read non-complex (mobile?) websites
* Secondary goal: Add certain elements of CSS, speed optimizations
* Language: [http://www.dev0.de/cmm/indexe.htm Sphinx C--]. May require writing a few lines in FASM though
* Skill level: intermediate/advanced
* Importance: High
* Mentors: punk_joker / hidnplayr
'''Links:'''
'''Links:'''
* [http://www.netsurf-browser.org/ NetSurf Website]
* [http://www.w3.org/TR/REC-html40/ HTML 4.01 Specification]
* [http://board.kolibrios.org/viewtopic.php?f=40&t=2315 Work done so far on NetSurf port (in Russian)]. If you don't know Russian, you can read [http://translate.google.com/translate?hl=en&sl=ru&tl=en&u=http%3A%2F%2Fboard.kolibrios.org%2Fviewtopic.php%3Ff%3D40%26t%3D2315 English translation using Google-Translate]
* [http://board.kolibrios.org/viewtopic.php?f=40&t=1075 Work done so far on WebView (mostly in Russian)]. If you don't know Russian, you can read [http://translate.google.com/translate?hl=en&sl=ru&tl=en&u=http%3A%2F%2Fboard.kolibrios.org%2Fviewtopic.php%3Ff%3D40%26t%3D1075 English translation using Google-Translate]
 
=== Drivers ===
Writing drivers is about new hardware and filesystems.<br>
Knowledge of specifications and previous experience are ''not'' required but surely desirable.
 
==== Ethernet driver(s) ====
'''Summary:''' Write an Ethernet driver


'''Details:'''
'''Details:'''
Our developer [[User:SoUrcerer|SoUrcerer]] started working on NetSurf browser port. Since he has no spare time, someone else needs to complete it.
* Primary goal: Support for popular Broadcom, Atheros or Marvell Yukon ethernet cards
* Goal: Bring NetSurf browser port in KolibriOS to the point of 90-95% functionality, with all critical and major bugs fixed, and only minor or trivial bugs left. First job would be fixing/enhancing the build system.
* Additional goal: A second driver / Improve documentation / ...
* Language: C (may require writing a few lines in FASM assembly though, to port some libraries)
* Language: Assembler/FASM
* Skill level: intermediate/advanced
* Skill level: intermediate/advanced
* Suggested by: Pretty much everyone in Kolibri
* Importance: Medium
* Mentors: punk_joker / hidnplayr
* Mentor: hidnplayr
* Links: [https://www.broadcom.com/collateral/pg/57XX-PG105-R.pdf BCM57XX programmers guide], [[Writing network drivers for KolibriOS]]
 
 
==== SD Host Controller ====
'''Summary:''' Add support for SD Host Controller
 
'''Details:'''
* Primary goal: Write driver for particular controller
* Additional goal: Test and update driver to work for all controllers
* Language: Assembler/FASM
* Skill level: intermediate/advanced
* Importance: High
* Mentor: dunkaist
* Links: [https://www.sdcard.org/downloads/pls/simplified_specs/index.html SD specifications]
 
 
==== USB devices ====
'''Summary:''' Add USB drivers for the new USB stack (webcams, gamepads, joysticks, tablets, etc.)


=== Web browser: WebView ===
'''Details:'''
'''Summary:''' Improve existing text-only web browser WebView - add more functionality and compatibility.
* Primary goal: Write USB driver for currently unsupported device (you should have one)
* Additional goal: Adopt code to work with all devices of the same class
* Language: Assembler/FASM
* Skill level: Expert
* Importance: High
* Mentor: hidnplayr
* Links: [http://en.wikipedia.org/wiki/USB#Device_classes USB device classes]


'''Links:'''
==== Filesystem support ====
* [http://www.w3.org/TR/REC-html40/ HTML 4.01 Specification]
'''Summary:''' Improve filesystem support in KolibriOS
* [http://board.kolibrios.org/viewtopic.php?f=40&t=1075 Work done so far on WebView (mostly in Russian)]. If you don't know Russian, you can read [http://translate.google.com/translate?hl=en&sl=ru&tl=en&u=http%3A%2F%2Fboard.kolibrios.org%2Fviewtopic.php%3Ff%3D40%26t%3D1075 English translation using Google-Translate]


'''Details:'''
'''Details:'''
* Primary goal: Have mostly complete HTML4 support on a good enough level to read non-complex (mobile?) websites
* Primary goal: Update/fix read-write support for EXT2/3/4 filesystems (partially done)
* Secondary goal: Add certain elements of CSS, speed optimizations
* Alternative goal: Add write support for the NTFS filesystem (read-only support already exists)
* Language: [http://c--sphinx.narod.ru/indexe.htm Sphinx C--]. May require writing a few lines in FASM though.
* Language: Assembler/FASM
* Skill level: intermediate/advanced
* Skill level: intermediate/advanced
* Suggested by: Leency / hidnplayr
* Importance: High
* Mentors: punk_joker / hidnplayr
* Mentor: dunkaist
* Links: [http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fkernel%2Ftrunk%2Ffs%2F&#a0aa5cede7308db82d4bae78266ed8462 Filesystems in KolibriOS]
 
 
=== System wide tasks ===
These tasks comprise both user space and kernel space work. Some developers consider them as of most importance for KolibriOS.<br>
Architecture and algorithm design skills are highly desirable.
 
==== Unicode support ====
'''Summary:''' Write userspace library and font server to handle unicode strings and fonts
 
'''Details:'''
* Primary goal: Write library to decode/encode UTF-8 and sort/compare/etc unicode strings
* Additional goal: Write basic font server
* Language: Assembler/FASM
* Skill level: intermediate
* Importance: Vital
* Mentor: dunkaist
* Links: [http://git.suckless.org/libutf/log/ small utf-8 library], [http://grub.gibibit.com/New_font_format good raster font format]


<!--
== Open Ideas (without appointed mentor) ==


=== Widget toolkit ===
==== Widget toolkit ====
'''Summary:''' Extend Box_lib to create a widget toolkit for software.
'''Summary:''' Extend Box_lib (a set of separate widgets) to create a full-featured widget toolkit


'''Details:'''
'''Details:'''
* Primary goal: Design architecture and implement focus handling, callbacks and other core ideas
* Additional goal: Integrate box_lib widgets to this framework
* Language: Assembler/FASM
* Language: Assembler/FASM
* Skill level: beginner/intermediate/advanced
* Skill level: beginner/intermediate/advanced
* Suggested by: XVilka
* Importance: Vital
* Mentor: ???
* Mentor: dunkaist
* Links: [http://en.wikipedia.org/wiki/Widget_toolkit basic idea], [http://en.wikipedia.org/wiki/List_of_widget_toolkits list of toolkits]
 
 
==== Unit testing framework ====
'''Summary:''' Design and implement an unit testing framework, write tests for kernel functions
 
'''Details:'''
* Primary goal: Design and implement a framework, write tests for kernel functions
* Additional goal: Write tests for system libraries (libio, libini)
* Language: Assembler/FASM (preferrable), any other working in KolibriOS
* Skill level: beginner/intermediate
* Importance: High
* Mentor: dunkaist
* Links: [http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks list of unit testing frameworks]
 
==== QR-code in boot log ====
'''Summary:''' Add a [http://en.wikipedia.org/wiki/QR_code QR-code] (containing the debug log) at the end of boot process
 
[[File:QR-code.png]]
 
'''Details:'''
* Description: Sometimes KolibriOS cannot boot on a certain hardware configuration (gets stuck during or after boot process). In such cases, we request the user having this problem to enable debug log at boot time, take a photo of the screen and show it to us (in the forum). However, sometimes taking a good quality photo can be quite challenging (bad camera, shaking hands etc.) and the attached photo is so blurry to the point the debug log cannot be even read. The idea suggested hereby is to simultaneously encode the debug log which is outputted on the screen, to the form of QR-code, and [http://wiki.kolibrios.org/wiki/File:QR-code.png show the resulting QR-code on empty space on the screen]. In such way, any user possessing a smartphone with a camera and QR-code scanner, could scan the QR-code and submit the encoded text directly on our forums (without having a need to take a photo), and our developers, in turn, would get the debug log text immediately and won't have to unscramble a blurry photo.
* Language: Assembler/FASM
* Skill level: beginner/intermediate
* Mentor: dunkaist
 
<!--
=== Open Ideas (without appointed mentor) ===


=== One core for graphics ===
==== One core for graphics ====
'''Summary:''' On multi-core systems, dedicate one core for graphics rendering ONLY.
'''Summary:''' On multi-core systems, dedicate one core for graphics rendering ONLY


'''Details:'''
'''Details:'''
* Goal: Move graphics subsystem to a single, dedicated core if multicore machine detected.
* Goal: Move graphics subsystem to a single, dedicated core if multicore machine detected
* Language: Assembler/FASM
* Language: Assembler/FASM
* Skill level: intermediate/advanced
* Skill level: intermediate/advanced
* Suggested by: Serge
* Mentor: Serge(?)
* Mentor: Serge(?)


=== Partition editor ===
==== Partition editor ====
'''Summary:''' Add a partition/HDD editor utility.
'''Summary:''' Add a partition/HDD editor utility


'''Details:'''
'''Details:'''
* Language: Assembler/FASM
* Language: Assembler/FASM
* Skill level: intermediate/advanced
* Skill level: intermediate/advanced
* Suggested by: hidnplayr
* Mentor: Mario(?)
* Mentor: Mario(?)


=== Rewrite "Table" in Assembler ===
==== Rewrite "Table" in Assembler ====
'''Summary:''' Rewrite a great Kolibri spreadsheet application [[Table]] from C++ to FASM
'''Summary:''' Rewrite a great Kolibri spreadsheet application [[Table]] from C++ to FASM


'''Details:'''
'''Details:'''
* Goal: Port Table (C++) to Assembler/FASM.
* Goal: Port Table (C++) to Assembler/FASM
* Language: Assembler/FASM
* Language: Assembler/FASM
* Skill level: beginner/intermediate/advanced
* Skill level: beginner/intermediate/advanced
* Suggested by: Wildwest/asiekierka
* Mentor: ???
* Mentor: ???


=== Kernel vulnerabilities ===
==== Kernel vulnerabilities ====
'''Summary:''' Find and fix as many kernel vulnerabilities as you can.
'''Summary:''' Find and fix as many kernel vulnerabilities as you can


'''Details:'''
'''Details:'''
Line 223: Line 436:
* Language: Assembler/FASM
* Language: Assembler/FASM
* Skill level: Intermediate/Expert
* Skill level: Intermediate/Expert
* Suggested by: Serge
* Mentor: Serge '''(Is not always available to answer questions, so select this task only if you can work fairly independently.)'''
* Mentor: Serge '''(Is not always available to answer questions, so select this task only if you can work fairly independently.)'''


=== Web browser in FASM ===
==== Web browser in FASM ====
'''Summary:''' Write a proper HTML web browser for KolibriOS
'''Summary:''' Write a proper HTML web browser for KolibriOS


Line 237: Line 449:
* Language: Assembler/FASM
* Language: Assembler/FASM
* Skill level: Expert
* Skill level: Expert
* Suggested by: Pretty much everyone in Kolibri
* Mentor: SoUrcerer
* Mentor: SoUrcerer


=== Font subsystem/Locales ===
'''Summary:''' Add a font subsystem (with Unicode?) and locale support
'''Details:'''
* Primary goal: Add a font subsystem for multiple fonts, etc., standardize it and add keyboard layouts.
* Language: Assembler/FASM
* Skill level: intermediate/advanced
* Suggested by: XVilka/Wildwest
* Mentor: XVilka
=== USB drivers ===
'''Summary:''' Add USB drivers for the new USB stack (gamepads, joysticks, tablets, etc.)
'''Details:'''
* Goal: USB driver(s) for currently unsupported devices.
* Language: Assembler/FASM
* Skill level: beginner/intermediate/advanced
* Suggested by: hidnplayr/Asper
* Mentor: XVilka


=== Printing/scanning API ===
==== Printing/scanning API ====
'''Summary:''' Add a printing and scanning API and drivers.
'''Summary:''' Add a printing and scanning API and drivers.


Line 267: Line 459:
* Language: Assembler/FASM
* Language: Assembler/FASM
* Skill level: intermediate/advanced
* Skill level: intermediate/advanced
* Suggested by: hidnplayr
* Mentor: SoUrcerer
* Mentor: SoUrcerer
-->
-->


[[Category:Misc]]
[[Category:Misc]]

Latest revision as of 16:55, 15 January 2016

GSoC2015.png

Introduction

KolibriOS is going to apply as a mentoring organization for Google Summer of Code 2015. This page contains our ideas list and some additional information for students and mentors.

We have previously participated as a Mentoring Organization in Google Summer of Code 2014. The ideas page for 2014 is available for your reference. Our organization page for GSoC 2014 and successfully completed projects for that year can be accessed via this link. To our great delight, both successful students of GSoC2014 stayed with the project and continue contributing to KolibriOS voluntarily in their spare time.

In 2013, we have run an independent Summer of Code using money we collected with Kickstarter. Two students have worked on KolibriOS, and the results of 2013 Summer of Code were: adding write support for EXT2 filesystem, and adding (read-only) support for XFS filesystem.

Student Requirements

Prospective students are required to register on our developers forum, join the developers chat and submit a small bugfix / improvement to our SVN in order for their application to be considered. Examples of such tasks can be obtained by asking on developers chat or on our IRC channel (#kolibrios @ irc.freenode.net). This requirement is only to show us that you are able to work with our SVN and interact with our developers if you are selected. This task has to be completed before student application deadline (27 March 19:00 UTC).

In addition, students need to answer the following questions when applying:

  1. Full Name (First + Last Name).
  2. E-mail address.
  3. Phone (home or mobile).
  4. Another phone for emergency cases (if we cannot contact you) - parents, boy/girlfriend, husband/wife etc.
  5. Nickname you plan to use on our forums, SVN repository or IRC chat.
  6. Age.
  7. Country + city of residence.
  8. Human languages you speak (state all languages and knowledge level - basic/intermediate/expert/mother tongue).
  9. Name of college or university you are accepted into or enrolled in + link to their website.
  10. Name of program (or faculty, or department) in that college/university you are accepted into or enrolled in.
  11. Your current timezone in UTC/GMT terms (for example, Paris is UTC/GMT +1 hours right now).
  12. Have you been involved with any open-source project in the past? If yes, which one, and what have you done for that project?
  13. Code samples - please provide links to code that you have written. It can be your high school project, contribution to open-source organization, your college/university task or anything like that.
  14. The task you are willing to work on from our list of Summer of Code 2015 ideas (or suggest your own idea, if you don't like any of the proposed ideas). Please provide an approximate work plan for your task split to 1-week intervals, as well as expected outcome of your work. This point should be detailed as much as possible, as your application would be evaluated mainly based on what you write here. You are welcome (and even encouraged!) to collaborate with potential mentors on this paragraph.
  15. What other time commitments, such as school work, university studies, another job, planned vacation, etc., will you have between May 25 and August 21 (coding period)? Please be as specific as possible. Bear in mind that GSoC is like a full-time job, so if you consider taking a summer semester at the university (with more than 1-2 courses), or intend to perform an internship or work elsewhere during the summer in addition to GSoC, you will likely be NOT accepted.

Organization

You can find the organizers on the IRC channel (#kolibrios @ irc.freenode.net) or at our forum: http://board.kolibrios.org/

Name Nickname Role
Yogev Ezra yogev_ezra Organization Administrator
Jeffrey Amelynck hidnplayr Mentor, Backup Administrator
Ivan Baravy dunkaist Mentor
Sergey Sakhno punk_joker Mentor

We have discussed "Google Summer of Code 2015" application with all active members of the KolibriOS Project Team, and selected only those 3 (three) people who have both the knowledge, the dedication, and the time to help their students during the entire summer. Each one of them was assigned to mentor projects in his area of specialization only. In a rare event when a Mentor from the above list cannot continue mentoring his student(s) due to personal circumstances, we will try to find a replacement Mentor, or ask the remaining Mentors to cover for the missing one. Additionally, there is always a number of knowledgeable members of our team hanging around our forum chat, and they will gladly answer any student questions that may arise, even if they haven't volunteered as Mentors themselves.

Mentors selected for this year are the same that were originally proposed for last year, and they have already proved to be responsible, helpful and knowledgeable during GSoC2014.

Ideas for Google Summer of Code 2015

The below list contains ideas suggested by KolibriOS team members. It is neither complete nor final.
Students are welcome (and even encouraged) to suggest their own ideas for GSoC, provided they can find a mentor amongst KolibriOS developers to guide them.

Sortable list of ideas for easy navigation

Idea Name Area Required Skill Level Importance for KolibriOS Programming Language Mentor
XDXF dictionary Application Basic Low Assembler(FASM) dunkaist
CPUID tool Application Beginner Low Assembler(FASM) dunkaist
FTP client Application Basic Medium Assembler(FASM) hidnplayr
Torrent client Application Advanced High Assembler(FASM)/C/C++ hidnplayr
XMPP/Jabber client Application Intermediate Medium Assembler(FASM) dunkaist
Music player Application Advanced Medium Assembler(FASM)/C/C++ dunkaist/hidnplayr
Web browser: WebView Application intermediate Standard Sphinx C-- punk_joker/hidnplayr
Ethernet driver(s) Driver Advanced High Assembler(FASM) hidnplayr
SD Host Controller driver Driver Advanced Low Assembler(FASM) dunkaist
USB device drivers Driver Expert High Assembler(FASM) hidnplayr
Filesystem support Driver Expert High Assembler(FASM) dunkaist
Unicode support System wide task Intermediate Critical Assembler(FASM) dunkaist
Widget toolkit System wide task intermediate Standard Assembler(FASM) dunkaist
Unit testing framework System wide task intermediate High Any dunkaist
QR-code in boot log Kernel/Library Basic Medium Assembler(FASM) dunkaist

Explanation of required skill level:

  • Beginner: No knowledge at all of the topic,
  • Basic: A very basic knowledge of the topic but no professional usage,
  • Intermediate: A basic knowledge of the topic but no regular professional usage,
  • Advanced: A good knowledge of the topic and a regular professional usage,
  • Expert: a perfect knowledge of the topic and a daily professional usage.

Explanation of importance for the project:

  • Low: For sure it doesn't hurt to implement, but if nobody does it, no one will even notice.
  • Medium: Nice-to-have feature. Will improve everyday life of users and developers.
  • High: This feature is needed for the project to start being adopted by masses.
  • Critical: This functionality is vital for the project to become useful.

Applications

These are userspace tasks. They often require only basic knowledge of algorithms and data structures.
No specific experience is required but welcome.

XDXF dictionary

Summary: Write dictionary application with support of XDXF (XML Dictionary eXchange Format)

Details:

  • Primary goal: Write library and corresponding dictionary application
  • Additional goal: Support of other dictioinary formats
  • Language: Assembler/FASM
  • Skill level: intermediate
  • Importance: Standard
  • Mentor: dunkaist
  • Links: fasm xml library, XDXF format


CPUID tool

Summary: Update existing CPUID application to be aware of new CPUs and their features

Details:

  • Primary goal: Write code to detect and report new CPUs and features
  • Additional goal: Refactor code as to use system libraries (libimg, box_lib, etc.)
  • Language: Assembler/FASM
  • Skill level: beginner/intermediate
  • Importance: Standard
  • Mentor: dunkaist
  • Links: CPUID program, Intel cpuid, AMD cpuid


FTP client

Summary: Create a GUI based FTP client or add FTP support to one of the existing file managers

Details:

Torrent client

Summary: Write a (bit-)torrent client for KolibriOS, or port an existing one

Details:

  • Primary goal: Implement a torrent client similar to µTorrent Free edition
  • Alternative goal (less preferred, but still possible): Port an existing torrent client to KolibriOS
  • Language: Assembler/FASM
  • Skill level: intermediate/advanced
  • Importance: High
  • Mentor: hidnplayr

XMPP/Jabber client

Summary: Write a XMPP/Jabber library and client for KolibriOS

Details:

  • Primary goal: Write basic xmpp library/client
  • Additional goal: Implement some xmpp extentions
  • Language: Assembler/FASM
  • Skill level: intermediate/advanced
  • Importance: High
  • Mentor: dunkaist
  • Links: XMPP spec, XMPP extentions


Music player

Summary: Improve the current music player in Kolibri

Details:

  • Primary goal: Rewrite the current music player (ac97snd), in FASM, and improve its functionality
* Support for file formats wav, mp3 and xm (using available external libraries)
* Support for playlists (m3u)
* A time display
  • Additional goal:
* Use of system wide hotkeys to control player
* Support for metadata (ID3, ...)
* More codecs (flac, vorbis, ...)
* Audio indication (oscillograph, bar graph, ...)
* Show cover art from files or album folder
* Fade in/out and/or crossover
* Streaming radio (at least mp3 over http stream)
* Skins
* Media library

Web browser: WebView

Summary: Improve existing text-only web browser WebView - add more functionality and compatibility

Details:

  • Primary goal: Have mostly complete HTML4 support on a good enough level to read non-complex (mobile?) websites
  • Secondary goal: Add certain elements of CSS, speed optimizations
  • Language: Sphinx C--. May require writing a few lines in FASM though
  • Skill level: intermediate/advanced
  • Importance: High
  • Mentors: punk_joker / hidnplayr

Links:

Drivers

Writing drivers is about new hardware and filesystems.
Knowledge of specifications and previous experience are not required but surely desirable.

Ethernet driver(s)

Summary: Write an Ethernet driver

Details:

  • Primary goal: Support for popular Broadcom, Atheros or Marvell Yukon ethernet cards
  • Additional goal: A second driver / Improve documentation / ...
  • Language: Assembler/FASM
  • Skill level: intermediate/advanced
  • Importance: Medium
  • Mentor: hidnplayr
  • Links: BCM57XX programmers guide, Writing network drivers for KolibriOS


SD Host Controller

Summary: Add support for SD Host Controller

Details:

  • Primary goal: Write driver for particular controller
  • Additional goal: Test and update driver to work for all controllers
  • Language: Assembler/FASM
  • Skill level: intermediate/advanced
  • Importance: High
  • Mentor: dunkaist
  • Links: SD specifications


USB devices

Summary: Add USB drivers for the new USB stack (webcams, gamepads, joysticks, tablets, etc.)

Details:

  • Primary goal: Write USB driver for currently unsupported device (you should have one)
  • Additional goal: Adopt code to work with all devices of the same class
  • Language: Assembler/FASM
  • Skill level: Expert
  • Importance: High
  • Mentor: hidnplayr
  • Links: USB device classes

Filesystem support

Summary: Improve filesystem support in KolibriOS

Details:

  • Primary goal: Update/fix read-write support for EXT2/3/4 filesystems (partially done)
  • Alternative goal: Add write support for the NTFS filesystem (read-only support already exists)
  • Language: Assembler/FASM
  • Skill level: intermediate/advanced
  • Importance: High
  • Mentor: dunkaist
  • Links: Filesystems in KolibriOS


System wide tasks

These tasks comprise both user space and kernel space work. Some developers consider them as of most importance for KolibriOS.
Architecture and algorithm design skills are highly desirable.

Unicode support

Summary: Write userspace library and font server to handle unicode strings and fonts

Details:

  • Primary goal: Write library to decode/encode UTF-8 and sort/compare/etc unicode strings
  • Additional goal: Write basic font server
  • Language: Assembler/FASM
  • Skill level: intermediate
  • Importance: Vital
  • Mentor: dunkaist
  • Links: small utf-8 library, good raster font format


Widget toolkit

Summary: Extend Box_lib (a set of separate widgets) to create a full-featured widget toolkit

Details:

  • Primary goal: Design architecture and implement focus handling, callbacks and other core ideas
  • Additional goal: Integrate box_lib widgets to this framework
  • Language: Assembler/FASM
  • Skill level: beginner/intermediate/advanced
  • Importance: Vital
  • Mentor: dunkaist
  • Links: basic idea, list of toolkits


Unit testing framework

Summary: Design and implement an unit testing framework, write tests for kernel functions

Details:

  • Primary goal: Design and implement a framework, write tests for kernel functions
  • Additional goal: Write tests for system libraries (libio, libini)
  • Language: Assembler/FASM (preferrable), any other working in KolibriOS
  • Skill level: beginner/intermediate
  • Importance: High
  • Mentor: dunkaist
  • Links: list of unit testing frameworks

QR-code in boot log

Summary: Add a QR-code (containing the debug log) at the end of boot process

QR-code.png

Details:

  • Description: Sometimes KolibriOS cannot boot on a certain hardware configuration (gets stuck during or after boot process). In such cases, we request the user having this problem to enable debug log at boot time, take a photo of the screen and show it to us (in the forum). However, sometimes taking a good quality photo can be quite challenging (bad camera, shaking hands etc.) and the attached photo is so blurry to the point the debug log cannot be even read. The idea suggested hereby is to simultaneously encode the debug log which is outputted on the screen, to the form of QR-code, and show the resulting QR-code on empty space on the screen. In such way, any user possessing a smartphone with a camera and QR-code scanner, could scan the QR-code and submit the encoded text directly on our forums (without having a need to take a photo), and our developers, in turn, would get the debug log text immediately and won't have to unscramble a blurry photo.
  • Language: Assembler/FASM
  • Skill level: beginner/intermediate
  • Mentor: dunkaist