Google Summer of Code 2016: Difference between revisions

From KolibriOS wiki
Jump to navigation Jump to search
(We have unicode capable system font)
 
(63 intermediate revisions by 6 users not shown)
Line 8: Line 8:


== Student Requirements ==
== Student Requirements ==
Prospective students are required to register [http://board.kolibrios.org/ on our developers forum], join the [http://board.kolibrios.org/chat.php developers chat] and submit a small bugfix / improvement [[Get_source_code|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 [[Get_source_code|our SVN]] and interact with our developers if you are selected. '''This task has to be completed before  [https://developers.google.com/open-source/gsoc/timeline student application deadline] (25 March 19:00 UTC).'''<br><br>
Prospective students are required to register [http://board.kolibrios.org/ on our developers forum], register [http://board.kolibrios.org/viewtopic.php?f=7&t=3240 yourself as a student], join the [http://board.kolibrios.org/chat.php developers chat] and submit a small bugfix / improvement [[Get_source_code|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 [[Get_source_code|our SVN]] and interact with our developers if you are selected. '''This task has to be completed before  [https://developers.google.com/open-source/gsoc/timeline student application deadline] (25 March 19:00 UTC).'''<br><br>
In addition, students need to answer the following questions when applying:
In addition, students need to answer the following questions when applying:
# Full Name (First + Last Name).
# Full Name (First + Last Name).
Line 35: Line 35:
|'''Role'''
|'''Role'''
|-
|-
| vacant
|Dmitriy Smirnov
| vacant
|Pathoswithin
|Organization Administrator
|Administrator for GSoC, mentor
|-
|-
|Jeffrey Amelynck
|Jeffrey Amelynck
|[[User:Hidnplayr|hidnplayr]]
|[[User:Hidnplayr|hidnplayr]]
|Mentor, Backup Administrator
|Mentor, backup administrator
|-
|-
|Ivan Baravy
|Kiril Lipatov
|[[User:dunkaist|dunkaist]]
|[[User:Leency|Leency]]
|Mentor
|Mentor
|-
|-
|Sergey Sakhno
|Ashish Gupta
|[[User:Punk Joker|punk_joker]]
|[[User:ashmew2|ashmew2]]
|Mentor
|-
|Sergey Kuzmin
|[[User:Wildwest|Wildwest]]
|Mentor
|Mentor
|-
|-
Line 54: Line 58:
We have discussed "Google Summer of Code 2016" 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 2016" 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.
Most 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 2016 ==
== Ideas for Google Summer of Code 2016 ==
Line 75: Line 79:
| Low
| Low
| Assembler(FASM)
| Assembler(FASM)
| dunkaist
| Pathoswithin
|-
|-
| [[#CPUID_tool|CPUID tool]]
| [[#CPUID_tool|CPUID tool]]
Line 82: Line 86:
| Low
| Low
| Assembler(FASM)
| Assembler(FASM)
| dunkaist
| Wildwest
|-
|-
| [[#FTP_client|FTP client]]
| [[#FTP_client|FTP client]]
Line 103: Line 107:
| Medium
| Medium
| Assembler(FASM)
| Assembler(FASM)
| dunkaist/hidnplayr
| hidnplayr
|-
|-
| [[#Music_player|Music player]]
| [[#Music_player|Music player]]
Line 110: Line 114:
| Medium
| Medium
| Assembler(FASM)/C/C++
| Assembler(FASM)/C/C++
| dunkaist/hidnplayr
| hidnplayr
|-
|-
| [[#Web_browser:_WebView|Web browser: WebView]]
| [[#Web_browser|Web browser]]
| Application
| Application
| intermediate
| Intermediate
| Standard
| High
| [http://www.dev0.de/cmm/indexe.htm Sphinx C--]
| [http://www.dev0.de/cmm/indexe.htm Sphinx C--]
| punk_joker
| Leency
|-
|-
| [[#Ethernet_driver.28s.29|Ethernet driver(s)]]
| [[#Ethernet_driver.28s.29|Ethernet driver(s)]]
Line 131: Line 135:
| Low
| Low
| Assembler(FASM)
| Assembler(FASM)
| dunkaist
| Pathoswithin
|-
|-
| [[#USB_devices|USB device drivers]]
| [[#USB_devices|USB device drivers]]
Line 145: Line 149:
| High
| High
| Assembler(FASM)
| Assembler(FASM)
| dunkaist
| Pathoswithin
|-
|-
| [[#Widget_toolkit|Widget toolkit]]
| [[#Wi-Fi|Wi-Fi]]
| System wide task
| Driver
| intermediate
| Expert
| Standard
| High
| Assembler(FASM)
| Assembler(FASM)
| dunkaist
| hidnplayr
|-
|-
| [[#Unit_testing_framework|Unit testing framework]]
| [[#Widget_toolkit|Widget toolkit]]
| System wide task
| System wide task
| intermediate
| Intermediate
| High
| High
| Any
| Assembler(FASM)
| dunkaist
| Pathoswithin
|-
|-
| [[#QR-code_in_boot_log|QR-code in boot log]]
| [[#QR-code_in_boot_log|QR-code in boot log]]
| Kernel/Library
| Kernel/Library
| Basic
| Basic
| Low
| Assembler(FASM)
| Pathoswithin
|-
| [[#C layer for KolibriOS|C layer for KolibriOS]]
| Library
| Intermediate / Advanced
| Medium / High
| C
| Ashmew2
|-
| [[#Virtualbox / QEMU support for KolibriOS|Virtualbox support for KolibriOS]]
| Library
| Advanced
| Medium
| Medium
| Assembler(FASM)
| C
| dunkaist
| Ashmew2
|-
| [[#Port PolarSSL|Port PolarSSL]]
| Library
| Intermediate / Advanced
| High
| C / FASM
| hidnplayr / ashmew2
|-
| [[#Port ScummVM|Port ScummVM]]
| Library
| Intermediate / Advanced
| Medium
| C / FASM
| hidnplayr / ashmew2
|}
|}
Explanation of required skill level:
Explanation of required skill level:
Line 179: Line 211:
* Medium: Nice-to-have feature. Will improve everyday life of users and developers.
* 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.
* 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 ===
=== Applications ===
Line 192: Line 223:
* Additional goal: Support of other dictioinary formats
* Additional goal: Support of other dictioinary formats
* Language: Assembler/FASM
* Language: Assembler/FASM
* Skill level: intermediate
* Skill level: basic
* Importance: Standard
* Importance: low
* Mentor: dunkaist
* Mentor: Pathoswithin
* Links: [http://tibleiz.net/asm-xml/ fasm xml library], [https://en.wikipedia.org/wiki/XDXF XDXF format]
* Links: [http://tibleiz.net/asm-xml/ fasm xml library], [https://en.wikipedia.org/wiki/XDXF XDXF format]


Line 206: Line 237:
* Language: Assembler/FASM
* Language: Assembler/FASM
* Skill level: beginner/intermediate
* Skill level: beginner/intermediate
* Importance: Standard
* Importance: low
* Mentor: dunkaist / Wildwest
* Mentor: Wildwest
* 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]
* 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], [http://board.kolibrios.org/viewtopic.php?f=42&t=594&start=90 forum topic about application]
 


==== FTP client ====
==== FTP client ====
Line 222: Line 252:
* 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)]
* 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)]


==== Torrent client ====
==== Torrent client ====
Line 234: Line 265:
* Mentor: hidnplayr
* Mentor: hidnplayr
* Links: [http://www.bittorrent.org Information about the protocol]
* Links: [http://www.bittorrent.org Information about the protocol]


==== XMPP/Jabber client ====
==== XMPP/Jabber client ====
Line 244: Line 276:
* Skill level: intermediate/advanced
* Skill level: intermediate/advanced
* Importance: High
* Importance: High
* Mentor: dunkaist/hidnplayr
* Mentor: hidnplayr
* Links: [http://xmpp.org/xmpp-protocols/rfcs/ XMPP spec], [http://xmpp.org/xmpp-protocols/xmpp-extensions/ XMPP extentions], [http://board.kolibrios.org/viewtopic.php?f=32&t=3111&p=62432#p62433 Unfinished XMPP client for KolibriOS]
* Links: [http://xmpp.org/xmpp-protocols/rfcs/ XMPP spec], [http://xmpp.org/xmpp-protocols/xmpp-extensions/ XMPP extentions], [http://board.kolibrios.org/viewtopic.php?f=32&t=3111&p=62432#p62433 Unfinished XMPP client for KolibriOS]


==== Music player ====
==== Music player ====
Line 252: Line 285:
'''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 goal:
* 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, ...)
: * More codecs (flac, vorbis, ...)
:* More codecs (flac, vorbis, ...)
: * Audio indication (oscillograph, bar graph, ...)
:* Audio indication (oscillograph, bar graph, ...)
: * Show cover art from files or album folder
:* Show cover art from files or album folder
: * Fade in/out and/or crossover
:* Fade in/out and/or crossover
: * Streaming radio (at least mp3 over http stream)
:* Streaming radio (at least mp3 over http stream)
: * Skins
:* Skins
: * Media library
:* Media library
* Language: Assembler/FASM (C/C++ to port codec)
* Language: Assembler/FASM (C/C++ to port codec)
* Skill level: intermediate/advanced
* Skill level: intermediate/advanced
* Importance: High
* Importance: High
* Mentors: hidnplayr / dunkaist
* Mentors: hidnplayr
* 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)]
* 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: WebView ====
 
'''Summary:''' Improve existing text-only web browser WebView - add more functionality and compatibility
==== Web browser ====
'''Summary:''' Improve existing text-only web browser Aelia (ex WebView) - add more functionality and compatibility


'''Details:'''
'''Details:'''
Line 280: Line 314:
* Skill level: intermediate/advanced
* Skill level: intermediate/advanced
* Importance: High
* Importance: High
* Mentors: punk_joker
* Mentors: Leency
'''Links:'''
'''Links:'''
* [http://www.w3.org/TR/REC-html40/ HTML 4.01 Specification]
* [http://www.w3.org/TR/REC-html40/ HTML 4.01 Specification]
* [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]
* [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]
==== Port ScummVM ====
'''Summary:''' Port ScummVM to KolibriOS.
'''Details:'''
* Primary goal: Port ScummVM to KolibriOS so that users can enjoy a wide range of already available software that runs on it.
* Secondary goal: Optimize for KolibriOS
* Language: C / FASM
* Skill level: intermediate / advanced
* Importance: Medium
* Mentors: hidnplayr / ashmew2
'''Links:'''
* [https://sourceforge.net/projects/scummvm/ ScummVM website], [https://sourceforge.net/projects/menuet/files/CD/A/ Old ScummVM port for MenuetOS]


=== Drivers ===
=== Drivers ===
Writing drivers is about new hardware and filesystems.<br>
Writing drivers is about supporting new hardware and filesystems.<br>
Knowledge of specifications and previous experience are ''not'' required but surely desirable.
Knowledge of specifications and previous experience are ''not'' required but surely desirable.


Line 300: Line 347:
* Mentor: hidnplayr
* Mentor: hidnplayr
* Links: [https://www.broadcom.com/collateral/pg/57XX-PG105-R.pdf BCM57xx programmers guide], [[Writing network drivers for KolibriOS]], [https://github.com/UDOOboard/U-Boot_Unico/blob/master/drivers/net/bcm570x.c BCM570x driver for u-boot (in C)], [http://websvn.kolibrios.org/filedetails.php?repname=Kolibri+OS&path=%2Fdrivers%2Funfinished%2Fbcm57xx.asm Stub for BCM57xx driver]
* Links: [https://www.broadcom.com/collateral/pg/57XX-PG105-R.pdf BCM57xx programmers guide], [[Writing network drivers for KolibriOS]], [https://github.com/UDOOboard/U-Boot_Unico/blob/master/drivers/net/bcm570x.c BCM570x driver for u-boot (in C)], [http://websvn.kolibrios.org/filedetails.php?repname=Kolibri+OS&path=%2Fdrivers%2Funfinished%2Fbcm57xx.asm Stub for BCM57xx driver]


==== SD Host Controller ====
==== SD Host Controller ====
Line 309: Line 357:
* Language: Assembler/FASM
* Language: Assembler/FASM
* Skill level: intermediate/advanced
* Skill level: intermediate/advanced
* Importance: High
* Importance: Low
* Mentor: dunkaist
* Mentor: Pathoswithin
* Links: [https://www.sdcard.org/downloads/pls/simplified_specs/index.html SD specifications]
* Links: [https://www.sdcard.org/downloads/pls/simplified_specs/index.html SD specifications]


==== USB devices ====
==== USB devices ====
Line 325: Line 372:
* Mentor: hidnplayr
* Mentor: hidnplayr
* Links: [http://en.wikipedia.org/wiki/USB#Device_classes USB device classes]
* Links: [http://en.wikipedia.org/wiki/USB#Device_classes USB device classes]


==== Filesystem support ====
==== Filesystem support ====
Line 330: Line 378:


'''Details:'''
'''Details:'''
* Primary goal: Update/fix read-write support for EXT2/3/4 filesystems (partially done)
* 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)
* Additional goal: Any improvement of filesystem support in KolibriOS
* Language: Assembler/FASM
* Language: Assembler/FASM
* Skill level: intermediate/advanced
* Skill level: intermediate/advanced
* Importance: High
* Importance: High
* Mentor: dunkaist
* Mentor: Pathoswithin
* Links: [http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fkernel%2Ftrunk%2Ffs%2F&#a0aa5cede7308db82d4bae78266ed8462 Filesystems in KolibriOS]
* Links: [http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fkernel%2Ftrunk%2Ffs%2F&#a0aa5cede7308db82d4bae78266ed8462 Filesystems in KolibriOS]
==== Wi-Fi ====
'''Summary:'''  Add Wi-Fi support to KolibriOS.
'''Details:'''
* Description: Write or port a Wi-Fi driver for KolibriOS, implement the ability to set a wireless connection.
* Language: Assembler/FASM
* Skill level: Expert
* Importance: High
* Mentor: hidnplayr
* Links: [https://en.wikipedia.org/wiki/Comparison_of_open-source_wireless_drivers Comparison of open source wifi drivers]




Line 351: Line 411:
* Language: Assembler/FASM
* Language: Assembler/FASM
* Skill level: beginner/intermediate/advanced
* Skill level: beginner/intermediate/advanced
* Importance: Vital
* Importance: High
* Mentor: dunkaist
* Mentor: Pathoswithin
* Links: [http://en.wikipedia.org/wiki/Widget_toolkit basic idea], [http://en.wikipedia.org/wiki/List_of_widget_toolkits list of toolkits]
* 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 ====
==== QR-code in boot log ====
Line 374: Line 422:


'''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.
* 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
* Language: Assembler/FASM
* Skill level: beginner/intermediate
* Skill level: beginner/intermediate
* Mentor: dunkaist
* Mentor: Pathoswithin
 
 
==== C layer for KolibriOS ====
'''Summary:''' Building a C layer for KolibriOS, so that we can get more developers and port more code to KolibriOS more easily.
 
'''Details:'''
* Description: As a lot of software out there is available in C and useful for KolibriOS, building an ecosystem around C and FASM is required. Some work towards a cross compiler has already been done. Since KolibriOS is neither Linux, nor Windows..it is challenging to port software. In order to automate this, we need to port existing libraries and figure out a way to automate/streamline this process. The best part about this is that you get to mix C and FASM in unprecedented ways and learn along the way. The end result should be as easy as writing a Makefile and calling the cross compiler which creates a binary for Kolibri OS. The eventual aim is to have libraries in C available for KolibriOS which let you use the same ASM procedures in C code. Some work on this has already been done. Get in touch to know more!
Example:
    #include<kolibri.h>
    int main()
    {
    kolibri_window("Hi!");
    return 0;
    }
* Language(s):
:* C - Required
:* FASM <Not a strict requirement, but is desirable>
:* GNU Autotools (Easy to pick up, safe to assume optional).
* Skill level: intermediate, bonus points for the ability in designing a clean approach to achieve this.
* Mentor: ashmew2
* Additional details: This project relies on working with the mentor on completing this project as it might be too large to be finished by a single student over one summer. The mentor will also actively work on the same project with the student.
 
 
==== Virtualbox / QEMU support for KolibriOS ====
'''Summary:''' Building Virtualbox / QEMU support for KolibriOS so that it is easier to use in a virtual machine.
 
'''Details:'''
* Description: Create a set of tools which let KolibriOS seamlessly interface with a host running Kolibri via VirtualBox. Develop parts required, especially shared folders, which resemble Guest Additions. (For a Linux based Host running KolibriOS as Guest.)
If not virtualbox, QEMU could use some feature enhancements for example the ability to update a usb drive from outside Kolibri and make Kolibri understand the new contents of the usb drive. This requires investigation skills as well as working in both Kolibri for support and QEMU / Virtualbox source code (as and when required).
 
* Language(s):
:* C - Virtualbox Source code
:* FASM - To understand the source code of KolibriOS better and prepare interfaces with Guest additions.
* Skill level: Advanced [ Unknown ], ability to understand a larger source code base and contribute to it are very desirable!
* Mentor: ashmew2
 
==== Port PolarSSL ====
'''Summary:''' Port PolarSSL to KolibriOS.
'''Details:'''
* Primary goal: Make a working port of PolarSSL (as native KolibriOS MS COFF library) and add it to the automatic build-system.
* Additional goal: Update HTTP library (written in FASM) to support HTTPS.
* Language: C / FASM
* Skill level: intermediate / advanced
* Importance: High
* Mentors: hidnplayr / ashmew2
* Links: [http://board.kolibrios.org/viewtopic.php?f=40&t=2460 Forum thread about polarSSL], [http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fdevelop%2Flibraries%2Fhttp%2F&#a12c8a35f2062865521028a57a419b4e8 HTTP library on WebSVN]
 
=== Miscellanous / Crazy Ideas ===
These ideas are not necessarily suited for a GSoC project but I think would be good to have.<br>
 
==== Combine Forum Chat and IRC ====
'''Summary:''' Transfer Forum Chat messages to IRC and IRC messages to Forum Chat.
'''Details:'''
* Background: It would help keep the growing KolibriOS community together. It would also be useful for developers as they can have IRC alerts built into IRC clients but no alerts for Forum Chat. I already wrote an IRC bot for #kolibriOS based on Willie and it would be desirable to integrate this feature with that bot.
* Language: Python for IRC Bot / Not sure about Forum Chat watching (Maybe Selenium script?)
* Skill level: beginner / intermediate / learner : want to learn about this stuff
* Importance: High
* Mentors: ashmew2
* Links: [https://github.com/ashmew2/IRCBot IRC Bot Source Code]


<!--
<!--
Line 442: Line 550:


[[Category:Misc]]
[[Category:Misc]]
== Rough Guide for Prospective Students ==
* As the kernel is written in FASM, ability to write and understand i386-assembly code is very useful.
* C is also a plus as some applications/libraries and components are written in C. Also, C is useful to interface with assembly at times.
* Familiarity with the GNu landscape like Autotools, GCC etc are also a plus to have (especially for porting software)
* The desire to take challenging problems and solve them is also required as several parts of the code base require thought for design and implementation. (The mentors can help you with that :) )
* Hanging out on Freenode's #kolibriOS , and our Chat (accessible through kolibrios.org -> Forum -> Chat) are where developers mostly hang out.
* Languages used for communication are Russian and English (although most developers are bilingual, and you can always ask someone for help)
* Get in touch with other developers via IRC / Chat / Forums and enjoy your stay!
== I'm a potential GSoC student. I'm scared of all the assembly and docs here! Where should I start?! :'( ==
Start here : http://wiki.kolibrios.org/wiki/HowTo
This will help you set up KolibriOS. Easiest will be to use either Qemu or VirtualBox as most developers use it and thus will be able to help you with eventual problems. Feel free however to try something else and let us know how it goes!
== I'm a potential GSoC student. What is this test task?! ==
Regarding the test mentioned above, it is for assessing your current skill set and their relevance regarding the project that you want to eventually work on. In most cases, your potential mentor will assign you a task via IRC / Forum Chat but another developer can do this as well . Meanwhile, In case you are waiting for a test task, you can go through our [http://bugs.kolibrios.org bug tracker] and find a small task to work on yourself, or learn about KolibriOS by going through example code.
== I want to play with the code but my college blocks SVN ==
If you are have trouble accessing, please do mention it on the forums.
You can temporarily use this backup git repository: http://repo.or.cz/w/kolibrios.git
== All the ideas seem interesting, But.. ==
Feel free to suggest your own idea! This is encouraged largely both in GSoC and KolibriOS. The mentors will be glad to such an idea and assess it's feasibility / usability for Kolibri.
== Great Guide! But I still don't understand X ==
Please read Documentation / Development pages on this Wiki. If you have any doubts, feel free to connect with other KolibriOS users and developers through Forum Chat or #kolibrios on Freenode.
Please ask developers / mentors on Forum Chat or IRC . Please be patient on IRC and Forum Chat as developers are on different time zones and it might take a few hours to get back to you. You can also start a Forum thread if it is about something you feel is a general issue.
Most importantly...Have Fun!

Latest revision as of 14:06, 30 March 2016

Introduction

KolibriOS is going to apply as a mentoring organization for Google Summer of Code 2016. 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, register yourself as a student, 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 (25 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 2016 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 23 and August 23 (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
Dmitriy Smirnov Pathoswithin Administrator for GSoC, mentor
Jeffrey Amelynck hidnplayr Mentor, backup administrator
Kiril Lipatov Leency Mentor
Ashish Gupta ashmew2 Mentor
Sergey Kuzmin Wildwest Mentor

We have discussed "Google Summer of Code 2016" 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.

Most 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 2016

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) Pathoswithin
CPUID tool Application Beginner Low Assembler(FASM) Wildwest
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) hidnplayr
Music player Application Advanced Medium Assembler(FASM)/C/C++ hidnplayr
Web browser Application Intermediate High Sphinx C-- Leency
Ethernet driver(s) Driver Advanced High Assembler(FASM) hidnplayr
SD Host Controller driver Driver Advanced Low Assembler(FASM) Pathoswithin
USB device drivers Driver Expert High Assembler(FASM) hidnplayr
Filesystem support Driver Expert High Assembler(FASM) Pathoswithin
Wi-Fi Driver Expert High Assembler(FASM) hidnplayr
Widget toolkit System wide task Intermediate High Assembler(FASM) Pathoswithin
QR-code in boot log Kernel/Library Basic Low Assembler(FASM) Pathoswithin
C layer for KolibriOS Library Intermediate / Advanced Medium / High C Ashmew2
Virtualbox support for KolibriOS Library Advanced Medium C Ashmew2
Port PolarSSL Library Intermediate / Advanced High C / FASM hidnplayr / ashmew2
Port ScummVM Library Intermediate / Advanced Medium C / FASM hidnplayr / ashmew2

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.

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: basic
  • Importance: low
  • Mentor: Pathoswithin
  • 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 + size detection for caches
  • Additional goal: Refactor code as to use system libraries (libimg, box_lib, etc.)
  • Language: Assembler/FASM
  • Skill level: beginner/intermediate
  • Importance: low
  • Mentor: Wildwest
  • Links: CPUID program, Intel cpuid, AMD cpuid, forum topic about application

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
  • Links: Information about the protocol


XMPP/Jabber client

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

Details:


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

Summary: Improve existing text-only web browser Aelia (ex 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: Leency

Links:

Port ScummVM

Summary: Port ScummVM to KolibriOS.

Details:

  • Primary goal: Port ScummVM to KolibriOS so that users can enjoy a wide range of already available software that runs on it.
  • Secondary goal: Optimize for KolibriOS
  • Language: C / FASM
  • Skill level: intermediate / advanced
  • Importance: Medium
  • Mentors: hidnplayr / ashmew2

Links:

Drivers

Writing drivers is about supporting 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:


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: Low
  • Mentor: Pathoswithin
  • 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)
  • Additional goal: Any improvement of filesystem support in KolibriOS
  • Language: Assembler/FASM
  • Skill level: intermediate/advanced
  • Importance: High
  • Mentor: Pathoswithin
  • Links: Filesystems in KolibriOS


Wi-Fi

Summary: Add Wi-Fi support to KolibriOS.

Details:

  • Description: Write or port a Wi-Fi driver for KolibriOS, implement the ability to set a wireless connection.
  • Language: Assembler/FASM
  • Skill level: Expert
  • Importance: High
  • Mentor: hidnplayr
  • Links: Comparison of open source wifi drivers


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.

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: High
  • Mentor: Pathoswithin
  • Links: basic idea, list of toolkits


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: Pathoswithin


C layer for KolibriOS

Summary: Building a C layer for KolibriOS, so that we can get more developers and port more code to KolibriOS more easily.

Details:

  • Description: As a lot of software out there is available in C and useful for KolibriOS, building an ecosystem around C and FASM is required. Some work towards a cross compiler has already been done. Since KolibriOS is neither Linux, nor Windows..it is challenging to port software. In order to automate this, we need to port existing libraries and figure out a way to automate/streamline this process. The best part about this is that you get to mix C and FASM in unprecedented ways and learn along the way. The end result should be as easy as writing a Makefile and calling the cross compiler which creates a binary for Kolibri OS. The eventual aim is to have libraries in C available for KolibriOS which let you use the same ASM procedures in C code. Some work on this has already been done. Get in touch to know more!

Example:

   #include<kolibri.h>
   int main()
    { 
    kolibri_window("Hi!");
    return 0;
    }
  • Language(s):
  • C - Required
  • FASM <Not a strict requirement, but is desirable>
  • GNU Autotools (Easy to pick up, safe to assume optional).
  • Skill level: intermediate, bonus points for the ability in designing a clean approach to achieve this.
  • Mentor: ashmew2
  • Additional details: This project relies on working with the mentor on completing this project as it might be too large to be finished by a single student over one summer. The mentor will also actively work on the same project with the student.


Virtualbox / QEMU support for KolibriOS

Summary: Building Virtualbox / QEMU support for KolibriOS so that it is easier to use in a virtual machine.

Details:

  • Description: Create a set of tools which let KolibriOS seamlessly interface with a host running Kolibri via VirtualBox. Develop parts required, especially shared folders, which resemble Guest Additions. (For a Linux based Host running KolibriOS as Guest.)

If not virtualbox, QEMU could use some feature enhancements for example the ability to update a usb drive from outside Kolibri and make Kolibri understand the new contents of the usb drive. This requires investigation skills as well as working in both Kolibri for support and QEMU / Virtualbox source code (as and when required).

  • Language(s):
  • C - Virtualbox Source code
  • FASM - To understand the source code of KolibriOS better and prepare interfaces with Guest additions.
  • Skill level: Advanced [ Unknown ], ability to understand a larger source code base and contribute to it are very desirable!
  • Mentor: ashmew2

Port PolarSSL

Summary: Port PolarSSL to KolibriOS. Details:

  • Primary goal: Make a working port of PolarSSL (as native KolibriOS MS COFF library) and add it to the automatic build-system.
  • Additional goal: Update HTTP library (written in FASM) to support HTTPS.
  • Language: C / FASM
  • Skill level: intermediate / advanced
  • Importance: High
  • Mentors: hidnplayr / ashmew2
  • Links: Forum thread about polarSSL, HTTP library on WebSVN

Miscellanous / Crazy Ideas

These ideas are not necessarily suited for a GSoC project but I think would be good to have.

Combine Forum Chat and IRC

Summary: Transfer Forum Chat messages to IRC and IRC messages to Forum Chat. Details:

  • Background: It would help keep the growing KolibriOS community together. It would also be useful for developers as they can have IRC alerts built into IRC clients but no alerts for Forum Chat. I already wrote an IRC bot for #kolibriOS based on Willie and it would be desirable to integrate this feature with that bot.
  • Language: Python for IRC Bot / Not sure about Forum Chat watching (Maybe Selenium script?)
  • Skill level: beginner / intermediate / learner : want to learn about this stuff
  • Importance: High
  • Mentors: ashmew2
  • Links: IRC Bot Source Code

Rough Guide for Prospective Students

  • As the kernel is written in FASM, ability to write and understand i386-assembly code is very useful.
  • C is also a plus as some applications/libraries and components are written in C. Also, C is useful to interface with assembly at times.
  • Familiarity with the GNu landscape like Autotools, GCC etc are also a plus to have (especially for porting software)
  • The desire to take challenging problems and solve them is also required as several parts of the code base require thought for design and implementation. (The mentors can help you with that :) )
  • Hanging out on Freenode's #kolibriOS , and our Chat (accessible through kolibrios.org -> Forum -> Chat) are where developers mostly hang out.
  • Languages used for communication are Russian and English (although most developers are bilingual, and you can always ask someone for help)
  • Get in touch with other developers via IRC / Chat / Forums and enjoy your stay!

I'm a potential GSoC student. I'm scared of all the assembly and docs here! Where should I start?! :'(

Start here : http://wiki.kolibrios.org/wiki/HowTo This will help you set up KolibriOS. Easiest will be to use either Qemu or VirtualBox as most developers use it and thus will be able to help you with eventual problems. Feel free however to try something else and let us know how it goes!

I'm a potential GSoC student. What is this test task?!

Regarding the test mentioned above, it is for assessing your current skill set and their relevance regarding the project that you want to eventually work on. In most cases, your potential mentor will assign you a task via IRC / Forum Chat but another developer can do this as well . Meanwhile, In case you are waiting for a test task, you can go through our bug tracker and find a small task to work on yourself, or learn about KolibriOS by going through example code.

I want to play with the code but my college blocks SVN

If you are have trouble accessing, please do mention it on the forums. You can temporarily use this backup git repository: http://repo.or.cz/w/kolibrios.git

All the ideas seem interesting, But..

Feel free to suggest your own idea! This is encouraged largely both in GSoC and KolibriOS. The mentors will be glad to such an idea and assess it's feasibility / usability for Kolibri.

Great Guide! But I still don't understand X

Please read Documentation / Development pages on this Wiki. If you have any doubts, feel free to connect with other KolibriOS users and developers through Forum Chat or #kolibrios on Freenode. Please ask developers / mentors on Forum Chat or IRC . Please be patient on IRC and Forum Chat as developers are on different time zones and it might take a few hours to get back to you. You can also start a Forum thread if it is about something you feel is a general issue.

Most importantly...Have Fun!