Student Application Template
Name: Catalin Constantin Usurelu
- catalin [dot] usurelu5 AT gmail DOT com
- IRC: UCC
- Romania, UTC +2
Who are you?
- I am a second year Computer Science student at the Computer Science and Automatic Control Faculty, University Politehnica of Bucharest.
Technical skills/Known technologies
- Programming languages: C/C++ (6 years), Java (4 years).
- Version control software: Git, Mercurial.
- Mobile computing: Basic Android knowledge.
Experience/projects I have worked on
- Some interesting projects I have worked on in college:
Tar archiver - I learned how to implement a standard and work with the Linux API(File I/O, Users and Groups).
BMP Image Compression Tool - implemented a Huffman Tree - based image compression tool.
TRON AI engine - every year, an AI contest is held for the Algorithm Design Course. Every second year student is participating and their grade depends on the ranking. My team (4 people) currently holds the 4th place. Our gitlab repo is private, but I can give you access if needed (it will become public when the contest ends before 24 May).
- Strong background in algorithms and data structures: I have participated and won many regional informatics contests and even qualified for the Romanian National Olympiad in Informatics.
What makes you the best person to work on this project?
- I have been using Ubuntu for 4 years now. I have started working on Debian ("Wheezy") for this years GSoC period to familiarize myself with it. I am a very ambitious, self-motivated and hard-working person. I always have interesting ideas and this project corresponds with something I wanted to do for quite some time: implement a protocol similar to Skype. The only problem is that I won't be able to add a P2P overlay to negate the drawbacks (bandwidth consumption) that appear when using TURN servers to bypass NAT. Currently IEFT is developing specifications for such a protocol, but it will be some time before it stabilises, so the chances for me to do anything useful in this direction are minimal. Nevertheless, when the specs finalize I will be happy to contribute to it (outside GSoC). Until then I want to contribute with the building blocks for that future. I believe I understand what this project should accomplish and I have the technical skills and knowledge to carry it out.
Project title: Enabling free multimedia real-time communications (RTC) with Debian
Currently Debian contains various applications for RTC, but there are problems when trying to make them work together. There are issues with NAT traversal, especially symmetrical NAT and, of course, there is the problem of inter-program communication, there are various incompatibilities when trying to communicate between different types of clients. ICE/TURN/STUN are capable of traversing NAT/firewalls but the multitude of programs, protocols and fragmentation in general, will always pose problems. WebRTC promises to fix these issues and it has the potential to become the de facto standard for real time communication. I actually view it as an extension and an evolution at the same time, of VoIP.
My aim is to bring improvements to existing packages that will greatly benefit the overall RTC experience in Debian. I want to make it possible for anybody with a debian.org account to register/login, make and receive calls, send and receive chat messages and participate in conferences. In order to do this I will first need to add support to reTurnServer and repro SIP proxy for Debian LDAP real-time lookup, in order to use Debian users existing authentication credentials.
I will try to bring some improvements to Jitsi and test the new additions on reSIProcate on it. I also plan to build a web module for RTC (similar to ?DruCall) to make use of the additions to reSIProcate and enable different types of communication (text/audio/video conferencing, desktop sharing, group file sharing etc.) between Debian developers and eventually normal users. By using WebRTC this is very simple to do and would enable better communication between developers so they can discuss and solve problems easier. The technologies I will use do this are sipml5 (or possibly jsSIP, but sipml5 provides all the functionality I need to make a WebRTC client), websockets, twitter bootstrap and possibly jQuery.
After building such a module, I plan to do one last thing, if time permits: create new package - a standalone WebRTC client app. By using node-webkit (it is a great open-source technology developed by Intel), it's a simple matter of modifying the existing developed module and integrating it with node-webkit, the whole process taking maybe a couple of days.
For testing purposes, Jenkins CI should help to test and sort out any problems in due time. Nevertheless, there might be some problems in testing the packages against each other, but I hope that, with help from the mentor and community I will be able to make it work. If the mentors would like me to use specific technologies or want me to implement something new or differently, then the project details will change over the course of development.
Synopsis: Improving existing RTC solutions and adding new ones to Debian.
Benefits to Debian
Benefits to Debian developers
- Complement existing solutions such as IRC, mailing lists, and general chat applications, with the purpose of increasing communication details (conferencing, file transfer and desktop sharing - they might be useful when dealing with certain problems and additional communication options would be of benefit).
Benefits to Debian users and beyond
- An universal RTC solutions would solve existing problems with fragmentation, incompatible modules/programs.
Link reTurnServer and repro SIP proxy authentication with existing debian.org LDAP infrastructure. If time permits, adding support for RADIUS and MySql.
- Create a conferencing web module.
- Port the developed web module to a standalone application.
Phase 1: bond with the community, acquire necessary knowledge to carry out project
- pre May 27 - talk with the mentors additional details about the project and stabilise current schedule.
- May 27 - June 16: I will have exams in this period, but I'm really excited about this project and will probably spare a few days to experiment with WebRTC.
- Week 1: June 17 - June 23: Familiarise myself with the reSIProcate codebase and necessary authentication technologies.
Phase 2: add RADIUS and LDAP authentication support to reTurnServe rand repro SIP proxy
Weeks 2, 3: June 24 - July 7: Add support for LDAP and RADIUS server lookup for reTurnServer using openLDAP, radiusclient-ng (already packaged in reSIProcate). Add thread-safe database asynchronous lookup capability. Repro seems to use a thread pool model to do this, so I will look into it. If time permits, also add MySql support.
- Weeks 4, 5: July 8 - July 21: Also add LDAP, RADIUS support for repro SUP proxy and asynchronous lookup. This step might take less since I will already be familiar with the process.
- Week 6: July 22 - July 28: Improve existing mutual TLS support to include access-control lists based on the email addresses in client certificates. This will decrease the risk of spam, interception and impersonation.
Phase 3: bring improvements to an existing application
- Weeks 7, 8: July 29 - August 11 : test new additions to reSIProcate with Jitsi and add additional improvements to Jitsi, especially to the videobridge component (fix possible stability issues). See how Jenkins works, and make necessary changes for it to work. Add additional test cases.
Phase 4: create an WebRTC client
- Weeks 9, 10: August 12 - August 25: build web client, with sipml5 (or jsSIP) and websockets.
- Week 11: August 26 - September 1: make a standalone Debian application of the web client by using node-webkit.
Week 12: September 1 - September 7: in this week I will try to makeup for any schedule mismatch in case it takes more than expected to do something.
Week 13: September 8 - September 15: final testing, debugging and packaging.
- The schedule may be subject to change if the mentors want this.
After finishing the WebRTC standalone client I want to maintain it and continue it's evolution. I hope that soon the P2PSIP standard becomes more stable so I can contribute to it and have a technology similar to the one Skype uses. I would have liked to do this now, but it's pretty hard for a developer (especially a beginner like me) to develop something like that in such a short time-frame, not to mention the protocol is changing and I would have to do allot of research myself. Nevertheless, that would be the final building block to complete my proposal.
Exams and other commitments: I will be finished with exams by June 14 so I will be able to start on schedule. I plan to attend ?DebConf13 from August 11th to August 18th where I would like to present my project and in this time frame I probably won't be able to work too much on the project.
I will commit 40-45 hours per week to the project, and if necessary, more.
- I love open source in general and the fact that I have been using Ubuntu (which is of course, Debian based) for a long time makes my relation to Debian even stronger. I think it's time to give something back to the community.
- And another thing, in my opinion Debian is the best Linux distro. I tried SUSE and Fedora but it simply didn't work out ...
Are you applying for other projects in SoC?
- I was planning to apply to a Mozilla project (Skype plug-in for Instantbird) but the project was droped at the last moment so I will only apply to Debian.