Proposal for Atomic
- Email Address: email@example.com
- Blog URL: https://nurav.github.io
- Freenode IRC Nick: vjoshi
- Code Forges (GitHub, GitLab, BitBucket, etc.): https://github.com/nurav
Questions to answer
Why do you want to work with the Fedora Project?
I have used Fedora on my own systems exclusively since a long time. It has helped me contribute to open source software by providing an up-to-date, yet stable base. Also, the Atomic project is at the forefront of container technology, something I am really interested in.
Do you have any past involvement with the Fedora Project or another open-source project as a contributor?
I will work towards contributing to Project Atomic before the coding season starts.
Have you participated in GSoC in the past? If so, what year(s) and which organization(s)?
No, I have not.
Do you plan to continue contributing to the Fedora Project after GSoC? If yes, what sub-project(s) are you interested with?
Yes, I will definitely contribute to Fedora and Project Atomic after GSoC. I am most interested in contributing to atomic app, since I feel that it's going to become the default way of package management in the future.
Why should we choose you over other applicants?
I have experience in contributing to open source software, since I have worked with KDE and Mozilla. I was a successful Season of KDE (a program similar to Google Summer of Code) intern in Nov 2015-Feb 2016, where I contributed to KFileMetadata, KDE's metadata extraction framework. I have experience in working with containerization technologies. I have worked to create an automatically scaling hosting environment that sparked new containers over various hosts if demand for a particular application increased. I created this using Docker (using docker-py), etcd and HAProxy. I have also contributed to Mozilla, where I created docker images for TaskCluster, Mozilla's container-based continuous integration infrastructure. Hence I have a good knowledge of container technology and I am keep to learn more.
I also have a good amount of experience in Python, since I have been using it since three years. I am currently learning Golang, and will have no problem using it if the project requires. I am familiar with the channels open source organizations use for communication and development and will have no problem contributing.
Have you contributed to any other open source organizations or projects? If so, do you have artifacts you can show so we can see your skill set(s)?
Yes. I have contributed to Mozilla and KDE. At Mozilla, I contributed to the Release Engineering and Firefox for Android teams, and at KDE, to Baloo (the desktop search engine) and KFileMetadata (the metadata extraction framework). You can check out https://github.com/nurav for code that I have written.
I was invited as a speaker to conf.kde.in, where I spoke about my project on KFileMetadata. I also conducted a workshop on Git and volunteered at a workshop on Qt. I am also an active member of my college's open source club, and have conducted several workshops (on Linux and Git) for it.
Overview and The Need
Project Atomic needs System Containers to run services that the docker daemon depends on. We already have a framework for installing, updating and uninstalling SPC containers. What this project will involve is making these things easier:
- Currently, we have etcd and flannel SPCs. This proposal will involve cleaning these up and adding another for Ceph.
- We need to have two files: the systemd unit file template and the OCI spec file template to build an image. Making the generation of these files automatic.
- Implementing a tool to transition from regular docker containers to SPCs.
- Add any missing CLI options that we need in order to achieve the previous objectives.
Any relevant experience you have
I have containerized several applications by using Dockerfiles: I containerized an internal application during an internship. I also containerized the desktop Firefox localization repack process for Mozilla. I am very comfortable with terms used related to containers and have a good understanding of how things work. I have also worked with Python for three years, and I'll need it for implementing most of the project.
How do you intend to implement your proposal
- Cleaning up etcd and flannel SPCs:
- Adding support for specifying the etcd for flannel and for port for etcd.
- Automatic generation of files
- For the unit files, we can look at the upstream unit file.
- For the OCI spec file, we can use https://github.com/jfrazelle/riddler/
- Tool to transition docker container to SPC
- Some research will be required during the community bonding period to decide the implementation details. Riddler will probably be of use here too.
A rough timeline for your progress
Before April 15:
- Get familiar with Project Atomic by completing tasks.
April 16 – May 11:
- Begin research to decide a way to automatically transition from docker containers to SPC containers.
- Understand the requirements and figure out concrete plans to carry out each requirement.
May 12 - May 24:
- Final exams at University. I will still be available via IRC/email.
May 25 – June 20 (Official coding period to mid term eval):
- Work on finalizing the design for SPCs in the Atomic CLI.
- Implement the final design and modify the existing flannel and etcd images according to this design.
- Blog about work done yet.
June 21 – July 15:
- Implement a tool to automatically generate systemd unit files (using the upstream unit files)
- Implement tool (using riddler) that can make OCI spec files from docker containers. This tool would also allow some values to remain configurable.
- Add commands to atomic CLI that might be needed.
- Finalize design of tool that can be used to transition from a docker container to an SPC and begin implementation
July 16 – August 9:
- Complete implementation of tool that enables transitioning from docker containers to SPCs.
- Clean up etcd and flannel SPC images according to the work done
- Create image for ceph
August 10 - August 15:
- Document the work done yet (on my blog and in the code).
August 16 – August 23 (Final Week):
- Buffer period, if in case something takes more time than expected. Otherwise, solve issues related to Project Atomic.
All the deliverables noted in the project overview would be completed and merged into master. Project Atomic would have a way to run System Containers in an easy way.