Hi all,
After some direction from Jean and Marek (much appreciated guys!) I've
submitted my latest draft to Qubes. I've also included it below. Any
critique is appreciated.
Google Summer of Code 2017
Qubes Proposal - GUI Improvements
0 Abstract
This is a project intended to improve the UX of the Qubes Manager (QM).
Specifically it will encompass the direction and discussion from the Qubes
mailing list and GitHub.
This project will involve becoming familiar with the Qubes paradigm and
code base. This will include reading existing bug reports and feature
requests. Work will proceed in several short iterations, with commits and
reports as deliverables. It will require working primarily in the QM
portion of the Qubes codebase, but depending on the nature of the bug, may
include work in other subsystems.
Disclaimer
No one is more familiar with the Qubes codebase than the development team
themselves. As a result of my inexperience, I may have overestimated my
ability, or conversely, underestimated the complexity of the underlying
codebase.
If you feel that my proposed timeline or deliverables are inappropriate
please let me know and we can work on improving both. I would really
appreciate this, as I would like to maximise my contribution to this
project.
1 Project Goals
The Qubes development team have decided that the Qubes Manager is in need
of a radical overhaul (#1870 [1], #2132 [2]). Specifically they intend to
split the QM into two separate interfaces. One which displays current
information about the system and allows control of same: currently running
VMs, resource usage, starting and stopping VMs, etc. The second is
concerned with the persistent attributes of the system. This covers
creation and management of AppVMs, as well as Qube specific actions.
It is the latter of these that is the focus of my proposal. Discussing this
with Marek and Jean on the mailing list has revealed to me that the Qubes
team have not completely settled on a graphical framework for this project.
As a result, further discussion will be required to determine whether to
proceed with the Qt framework or to port the project to GTK. However, I
feel the technology used is relatively independent of the design of the
manager itself, and so I proceed.
The development of this can be broken up into three distinct phases.
1.
Analysis of the existing wireframes written by bnvk [3]
1.
If necessary, port this code to GTK.
2.
Expand upon this codebase, so as to deliver a QM manager that allows
users access to persistent configurations as in the current manager.
3.
Add features as enumerated in #1870 [1]
2 Implementation
In a project like this, communication is crucial. I believe that the only
way to avoid confusion when collaborating is to have “everyone nodding,
around the same diagram”. To this end, I anticipate regular (ideally daily)
contact between myself and my mentor as well as weekly formal reports on
progress.
As earlier noted, the basis for this project is the work already started by
bnvk. Last year they submitted concepts and wireframes for the new QM. This
to me is the best starting point as their suggestions were well received by
the development team.
I will then expand on this, taking functionality present in the current QM
and bringing it into appropriate panels within the new QM. Naturally, this
will be thoroughly documented and tested. Particular attention will be paid
to ensure that existing functionality is not lost, such as accessibility
for keyboard-only power users.
Once complete, I will bring a list of suggested features and enhancements
to the development team, and perhaps to the community at large if this is
deemed appropriate by my mentor. We can then discuss which of these
features are suitable for me to undertake.
These new features can then be implemented in the new QM in preparation for
the Qubes 4.0 release. After GSOC, I will be able to tackle more complex
features and bug-fixes in relation to the Qubes Manager.
3 Road Map
Qubes will be my focus this summer, with continued contributions
afterwards. I really enjoy learning new systems and skills in my free time,
and have no issue allocating time as necessary. Due to my relative
inexperience, I expect significant catch-up time will be necessary to be
able to properly contribute to Qubes. Considering this, I expect to work no
less than full time - hopefully upwards of 40 hours per week.
My only other commitments are relatively trivial. I work occasionally
(approximately once per week), as evening support staff for a summer school
in my college. It is primarily a pastoral role, helping with meal times,
first aid and facilities management.
At the end of the summer, provisionally the last two weeks in August, I may
be attending training for the role of RA with my college for the next
academic year.
Because it is the Summer of Code I do intend to take a couple weekends
hiking and camping in the mountains local to me, but I do not anticipate
that this will conflict with my Qubes schedule.
Below I have detailed a possible plan for delivering on the promises I have
made above:
Timeline
- 3.0 - Installation and Familiarisation with Qubes, Setup qubes-builder
-
April 3rd - May 30th
As I am not currently intimately familiar with Qubes, I will reinstall it
and transition to it as my day-to-day OS. Ideally I will build the OS from
source, but I believe using Qubes will be the most effective resource when
designing UX improvements.
- 3.1 - Reading Documentation, Identifying Skills, Trivial Contribution
-
May 30th - June 6th
Qubes has a plethora of user and developer feedback, and future plans. My
first step to contributing to Qubes will be to immerse myself in this
documentation.
A beautiful interface is useless if it is ineffective. Understanding and
using the various system calls and configurations used by the QM will be
crucial to improving it.
In order to ensure that my environment is setup correctly and that I am
adhering to existing style practices I should submit a trivial contribution
to Qubes. An example of this would be the revising of the “DispVM” name
across Qubes as documented in #2671 [4].
- 3.2 - Learning GTK/Qt, Contribute a Bug Fix to Qubes, Compile Report
on QM Requirements
-
June 6th - 20th
At this point, with guidance from Jean and Marek, the GTK/Qt decision will
have been made and I will have begun implementing trivial UI components in
Qubes. Using this knowledge, I will be able to contribute to one or more of
the issues that have been pain points for users (e.g #1117) [5].
Next, I will analyse the current QM and report on what parts belong in the
new QM, and what should instead be included with the “current state”
display widget. These findings will be taken to the team for feedback and
will form the basis for the design of the new QM.
- 3.3 - Expand on QM Design by bnvk, Draft Design, Discuss with
Development Team and Amend Proposal.
-
June 20th - 27th
Based on this report, I will draft UI mockups and design the specific tabs
and menus of the new interface. This can be taken to the team for feature
suggestions and improvements.
I will compile a memo on my planned approach to the development of a new QM
and discuss this with my mentor. As I receive feedback, the planned
approach will be amended and improved.
- 3.4 - Implement Proposed QM Core Functionality
-
June 27th - July 11th
Taking the memo and groundwork laid by bnvk, I will begin creating the new
QM interface and porting features. Deliverables will take the form of a
commit of a basic interface for the new QM, with the basic functionality
implemented.
- 3.5 - Complete Core QM
-
July 11th - 25th
Complete the QM, including all features related to the persistent
attributes of the system. Deliverable will take the form of a commit that
can be installed and tested by the community at large.
- 3.6 - Additional Features
-
July 25th - August 29th
I will take the features selected by my mentor and I, ideally with a
timeframe of one week each, but of course this will depend on the nature
and complexity of the enhancement. The deliverables will be commits with
the full functionality as agreed.
- 3.7 - Compile Final Report on GSOC
-
August 29th
Produce and publish a final report on my experience with GSOC and Qubes -
hopefully with input from the development team. This should prove useful
for others interested in contributing to an OSS project such as Qubes or in
the Google Summer of Code.
4 Experience
I am a competent C programmer, with more than four years of experience. I
have less experience with Python, only a couple of years, though it quickly
became my preferred language primarily due to the community support and its
widespread adoption. I tend to use a fairly object-oriented style, with
flexible data structures and consistently named functions and variables.
I am partial to the OTBS, but I am no evangelist and will conform to
existing style standards.
I have used C for high-level scripts and a small amount of embedded
development, specifically with Arduino.
Through my college course I have completed several C courses and one in
OOP, taught through C++. As a result I have an excellent basis in
imperative programming.
Most of my experience in development has been on MacOS because that was
what I grew up with. I stayed with MacOS due to its similarity to Linux and
ease of use. In recent years, I have been transitioning to Linux and am
currently using Manjaro for my day-to-day needs. I used Qubes briefly
several months ago, but required a computer for class and couldn’t
reconcile the setup time when I had coursework due. I am switching my
computer to Qubes to familiarise myself with the system.
Almost all my computer coursework during the past three years has been on
Unix, specifically MacOS. I'm very comfortable using the shell and other
standard Unix facilities. As part of this coursework, I took a class in
Unix programming. This was one of my most beneficial classes and included
the structure and operation of the Unix OS, Bash scripting and the GNU
build system.
5 Contact
John Casey
[email protected]
IRC - jmcasey
Twitter - @JackBobCasey
I am attending University College Dublin, Ireland. I am currently
completing the third year of my bachelors in Electronic Engineering, with
the intention of pursuing a Masters in Electronic and Computer Engineering.
I strongly support software freedom. I use GNU/Linux daily in my
development work.
I have not contributed code to a public open software project, but have
helped provide code for the robotic hand built my college’s Robotics Club.
I am certain that it could have been better, but I know that now it is
publicly available, others can improve and augment my codebase.
I briefly experimented with Qubes in the summer of 2016, but moved away
from it. I have recently moved back to Qubes to get a feel for its
compartmentalization features before installing it on my main laptop.
I have some experience with distributed development. I'm familiar with
mailing lists, revision control, etc. I know how to use Git, and I am more
than willing to learn other systems; after all that is the goal of GSOC
To conclude, I learn quickly, and can code efficiently and communicate
professionally. Given the size of the Qubes team and community, working
within a group and towards a common goal is essential, and I excel at this.
I am very interested in contributing to Qubes as I believe that it has a
positive effect on its users and on the security community at large.
6 References
[1] https://github.com/QubesOS/qubes-issues/issues/1870
[2] https://github.com/QubesOS/qubes-issues/issues/1117
[3] https://github.com/bnvk/qubes-manager-new
[4] https://github.com/QubesOS/qubes-issues/issues/2671
[5] https://github.com/QubesOS/qubes-issues/issues/1117
Regards,
John
--
You received this message because you are subscribed to the Google Groups
"qubes-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/qubes-devel/4e8b4e83-3306-4dbe-903f-c59a8e665211%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.