GSoC/GCI Archive
Google Summer of Code 2009


Web Page:

Mailing List:,,

Tux4Kids is a volunteer project dedicated to creating fun and educational software for children. The project was started by Sam Hart over ten years ago and currently maintains and develops three software programs. The programs take their name from Tux, the Linux mascot. Tux Paint, led by Bill Kendrick, is an award-winning and widely used artistic graphics program. Tux Paint is enjoyable for everyone from the youngest children capable of using computers up through adults. Tux Math (originally written by Bill Kendrick, now led by David Bruce and Tim Holy) is a video game-style math drill program. It covers basic math operations up through topics such as negative numbers, factoring, and order-of-operations exercises. Tux Typing (originally written by Sam Hart, now led by David Bruce) offers word typing practice in the setting of two video game-type activities, as well as phrase and sentence typing for older students. All three programs are SDL-based C apps, licensed under the GPL. They are developed natively on Linux and are included in all major desktop distributions, as well as non-Linux Free Software collections such as the FreeBSD Ports Collection and the MacPorts project for OS-X. Builds are also available for Microsoft Windows and BeOS. The aim is to avoid specific platform dependencies so the programs can be made available as widely as possible, including the computing environments that children are most likely to actually encounter in schools. Similarly, all three programs are extensively internationalized using the standard GNU gettext library.


  • Administration tool for Tux4Kids Currently TuxMath and TuxType are standalone programs that are controlled only by the user. The idea is to give more control to the teacher, so that he/she could integrate Tux4Kids into the school curriculum. This includes an ability to set the same activity for all students, manage high scores etc. The project is to create a configuration/administration utility to achieve this goal.
  • Audio Refactoring and Comment Support for Tux Paint In this moment Tux Paint is using the SDL_mixer lib to handle sound output. The lack of audio input in SDL prevents Tux Paint adding cool features like recorded audio comments and, in a future networked version of TP, voice chat. The idea is to port Tux Paint audio to Portaudio and libsndfile, two of the most important libraries used to handle sound and sound files. The first one is a portable audio library, which abstracts the platform specific tasks and gives a full I/O audio platform to work with. The second one is I/O library to handle wave files, it supports many different wave formats and frame rates. After porting to these useful tools we can easily add a voice comment facility. Another features like loading custom sounds to use as comments (instead of recording them) could emerge thinking on the possibility of having another sound file libraries like ogg / mp3, etc.
  • LAN Multiplayer For TUXMATH Support for LAN multiplayer mode. This is probably the most ambitious, as it will require restructuring the game into client and server programs. Networking to be accomplished using SDL_net.
  • SVG support and flexible graphics positioning systems for TuxMath and TuxType Currently, all graphics in TuxMath and TuxType are stored in raster image formats, which do not behave well while scaling. The positioning of graphical elements is done via hard-coded values, which causes problems while changing video modes or extending game menu. My project aims at: 1.Implementing SVG support via libRSVG and cairo. 2.Redesigning the menu rendering system and making it more flexible and extensible. 3.Designing and implementing a set of scaling and positioning algorithms.
  • User Word/Phrase Input and Report Card Feature for Tux Typing The purpose for this project is to enhance Tux Typing so that it can be of greater use to educators, both in and out of the classroom setting. The project would have two major objectives. First: Make it possible for users to easily create (and save) word/phrase lists. Second: Provide feedback to the user about their strengths and weakness in the form of a possible 'report card' that informs the user what letters they need to work on for improvement.