Hi Guix,

PFA an incomplete first draft of my GSoC proposal for a DHCP client for
Guix and dmd. Please take a look, thank you in advance! I've tried to
conform to the GNU proposal guidelines:
http://www.gnu.org/software/soc-projects/guidelines.html

The draft is incomplete because I've left out only the detailed timeline,
which I can only complete once  the deliverables are finalised :) Right now
I have a rough idea, but I would like your help telling me if the
deliverables I have proposed are too little, or too much, or too vague, as
well as pointing out any other issues with my proposal you can spot.

Thanks again,

-Rohan
Project name
------------

Implementing a DHCP client in Guile Scheme

Summary
-------

We want to have a DHCP client written in Guile Scheme. Specifically:
1. The implementation will comply with IETF RFC 2131 [1]
2. The client will be bundled as a Guix package [2], which installs a 
command-line program similar to ISC’s dhclient (8) utility. [4,5]
3. The client code should be modular, so that some of its functions can be 
invoked from within GNU dmd’s [6] proposed event loop.
4. The client should be runnable as a dmd service, as described in the dmd 
manual [6]

Communication
-------------

Name: Rohan Prinja
Email: rohan.pri...@gmail.com
IRC: wenderen
Github: wenderen
Mobile: +91 96190 19345
Country of residence: India
Timezone: IST (GMT +530)
Primary Language: English

Benefits
--------

Currently the only DHCP client implementation in the Guix package list is the 
ISC implementation, which is written in C. The aim of this project is to 
deliver a Guile Scheme implementation of a DHCP client satisfying the 
conditions outlined in the abstract. The motivation for this is that GNU dmd 
should be able to easily call DHCP library functions from its event handlers in 
response to various network events. Since dmd is written in Guile Scheme, we 
want our DHCP library to be written in Guile Scheme as well.

How users benefit: this project is related to dmd gaining an event loop so that 
it can properly handle events - including DHCP events - rather than simply 
waiting for the client. dmd performing faster and better is a win for the user.

How GNU benefits: Guix SD gains an important daemon!

Deliverables
------------

1. A module written in Guile Scheme, implemeting RFC 2131.
2. A command-line program available as a Guix package, which calls the module's 
functions.
3. A dmd service for the DHCP client.
4. (TODO: discuss this with Ludo) Integration of the module with dmd's event 
loop.

High-level plan
---------------

This project involves writing a library more or less from scratch. So designing 
and discussing the structure of the library with knowledgeable community 
members is a prerequisite. I've tried to keep this task before the actual GSoC 
period, because I want to reserve the GSoC period for writing code, code review 
and committing.

I propose the following high-level timeline:

Pre-GSoC Period (before May 25)
* Environment setup, finish all background reading
* Design client library API
* Design command-line program along the lines of dhclient

GSoC Period (May 25 - Aug 9)
* Write a stubbed DHCP client module which exports skeleton functions (for 
example, a skeleton function might simply print to stdout). This will include:
    -> functions for constructing and sending over a network DHCP packets 
compliant with the RFC.
    -> functions that handle client logic, like transitioning between states in 
the DHCP client FSM [8].
    -> functions for manipulating the local store.
* Write the command-line program and call the module's functions from within it.
* Patch dmd with a bare-bones event loop so that we can test events related to 
the DHCP client process.
* Call the module's functions from within the event loop and ensure that the 
functions are being invoked correctly.
* Fill the stubs! This involves making use of Guile Scheme's networking library 
[7] and referring to the dhclient source [4].
* Re-test the command-line program and the integration with dmd's event loop 
after the stubs are filled in.
* Create and test a dmd service for the client.

Buffer period (Aug 17 - Aug 23)
* If the event loop is implemented in parallel by some other community member, 
merge their implementation with my changes and re-test

Detailed plan + Midterm evaluation
----------------------------------

TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO
0. Pre GSoC period: April 27 - May 25
1. May 25 - May 31
2. June 1 - June 7
3. June 8 - June 14
4. June 15 - June 21
5. June 22 - June 28
6. June 29 - July 5
7. July 6 - July 12
8. July 13 - July 19
9. July 20 - July 26
10. July 27 - Aug 2
11. Aug 3 - Aug 9
12. Aug 10 - Aug 16
13. Aug 17 - Aug 23
TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO

References
----------

[1] RFC 2131: https://www.ietf.org/rfc/rfc2131.txt
[2] Guix package manager: http://www.gnu.org/s/guix
[3] List of available Guix packages: 
http://www.gnu.org/software/guix/package-list.html
[4] ISC DHCP implementation: https://www.isc.org/downloads/dhcp/
[5] dhclient man page: http://linux.die.net/man/8/dhclient
[6] dmd manual: http://www.gnu.org/software/dmd/manual/dmd.html
[7] Guile networking: 
https://www.gnu.org/software/guile/manual/html_node/Networking.html
[8] DHCP FSM: 
http://www.tcpipguide.com/free/t_DHCPGeneralOperationandClientFiniteStateMachine.htm

Qualification
-------------

* Why does this project appeal to me?

    I am interested in this project because:

    1. I want to do impactful work, and a DHCP client is a vital component of 
modern operating systems.
    2. Writing a standards-compliant library looks like an interesting 
challenge.
    3. I did a "Networks" course in college and enjoyed it.
    4. I also like the Guile Scheme aspect. I did an "Abstractions and 
Paradigms in Programming" course in college, where I programmed in Racket. It 
was fun :)

* Relevant experience

    1. I have contributed small patches to Google Skia as part of an internship 
with Samsung, and some commits to Mozilla Servo (on a voluntary basis).
    2. As mentioned above, I have experience in network programming and am 
familiar with Racket.
    3. I am comfortable with using mailing lists, responding to code reviews 
and giving and asking for help on IRC.

* What will I do after GSoC ends?

    I see GSoC as a stepping stone to being actively involved in the community 
by contributing and maintaining code, and also bringing in newcomers to GNU 
projects. If I am selected and the project is very successful, I would like to 
apply as a mentor in the following years.

Why am I applying to GNU?
-------------------------

I’m grateful to GNU both for creating software that I use everyday, and for 
promoting a philosophy of software that respects the user. I’m very excited to 
be applying to GNU. I see this as a chance to do two things:

1. Do a useful and impactful project for a community that has given me so much.
2. As mentioned above, I want to join the community in earnest, using this 
project as a first step.

Reply via email to