1: # Google Code-In (GCI) project ideas
3: ## Introduction
4: For the application for [Google Code-In 2012](http://code.google.com/opensource/gci/2012/index.html), and as a starting point for people who want to start working on NetBSD, here is a list of tasks to be fulfilled.
6: All the tasks should be completable within hours or up to three days. To get an idea of how much a single task should be and what kind of they could be, look at [this page](http://code.google.com/p/google-code-in/wiki/GCIExampleTasks).
8: Even if you don't want to attend the Code-In, you can use this as a starting point. In most cases, the work needs some research in order to be completed. Just write a mail to one of the [mailing lists](http://www.netbsd.org/mailinglists/ you think is suiting (if you don't find any, just pick netbsd-users) and ask for more details.
10: Previous events by Google: [Code-In 2010](http://code.google.com/opensource/gci/2010-11/index.html), [Ghop 2007](http://code.google.com/opensource/ghop/2007-8/)
12: ## Goals as stated by Google
13: 1. **Code**: Tasks related to writing or refactoring code
14: 1. **Documentation/Training**: Tasks related to creating/editing documents and helping others learn more
15: 1. **Outreach/Research**: Tasks related to community management, outreach/marketing, or studying problems and recommending solutions
16: 1. **Quality Assurance**: Tasks related to testing and ensuring code is of high quality
17: 1. **User Interface**: Tasks related to user experience research or user interface design and interaction
20: ## Proposed tasks
22: ### Documentation
24: * **Task: Describe the format of usermgmt.conf**: The file usermgmt.conf contains default values used by user management tools (like useradd(8)). But currently, the manpage usermgmt.conf(5) contains only a description of the fields, but not the format of the file itself. So review code about what is possible (spaces, tabs, etc.) and create an EXAMPLE section.
25: The file can be seen here: [usermgmt.conf(5)](http://netbsd.gw.com/cgi-bin/man-cgi?usermgmt.conf+5+NetBSD-current)
26: *Tags*: Documentation mdoc man
28: * **Task: Create an overview of NetBSD documentation**: NetBSD has a variety of documentation stored everywhere in the web. On the one hand, there's the website with single articles, the NetBSD Guide, the pkgsrc Guide, documentation in /usr/, the NetBSD wiki, some important mailing list posts, manpages, other mdoc documents, something stored inside the code, etc.
29: In an attempt to gather documentation for NetBSD and provide a nicer entry point for beginners, this task is about gathering the points where documentation lies (with the full path), what language it is written in, what it is about (just a rough overview), and how much it is.
30: For the final goal, see [this mailing list post](http://mail-index.netbsd.org/netbsd-docs/2012/09/20/msg000295.html).
31: If you want to do this task, get in touch with us such that we can provide you with basic information where to start.
32: *Tags*: Documentation
34: * **Task: Howto: How to get a graphical environment on NetBSD**: NetBSD is a very sleek operating system, delivering an X server (and the mandatory twm), but nothing else. As most people don't like twm, they install another graphical environment.
35: But how do you do so?
36: This task is about creating a howto to install graphical environments after the installation. You should provide screenshots or screendumps (when still being on the console) and describe which configuration files have to be modified, which packages should be installed, which are there after the instalation and which can be added afterwards (special editors, etc.), and so on.
37: The package light-desktop should be stressed in this documentation.
38: *Tags*: GUI howto
40: * **Task: Howto: Configure npf**: The new NetBSD packet filter npf is a nice and well-scaling way to configure a firewall. Despite being there and functional, it does not have much documentation.
41: The manpage of npf.conf(5) gives an introduction, but nothing that could be used as a howto: [npf.conf(5)](http://netbsd.gw.com/cgi-bin/man-cgi?npf.conf+5+NetBSD-current).
42: The howto should contain a step-by-step introduction about how npf works, but also an introduction to the technics of npf itself: What kind of rules and tables are there, how they are applied, etc.
43: *Tags*: howto network firewall
45: * **Task: Compare firewall solutions in NetBSD**: NetBSD has several firewall solutions on board: ipf, npf, pf, even more (you should research that).
46: For the beginner, it is not clear what they are capable of, how fast they are and what their syntaxes look like.
47: In this task you should research the differences of these firewalls, create some examples that do the same (so you can view them side-by-side) and provide links to further documentation.
48: *Tags*: comparison network firewall
50: * **Task: Create an overview of the NetBSD server layout**: If you're on a NetBSD mirror, after traversing into the tree you'll see various directories that seem to do the same.
51: You have to traverse the directories of a NetBSD server (ftp.netbsd.org might be the best one, as it is *the* reference), find out which directories have which meaning, and document that. In the end, you should think about a good ASCII representation of a directory tree and realize it.
52: *Tags*: research overview
54: * **Task: Create an overview of the NetBSD releases**: As every project with release engineering, it is difficult for a beginner to know which releases are the current ones, how long will a branch be supported, what are the actual branche names and what is the actual change in a minor or in a major version, what about binary compatibility, and where can I get information all in all?
55: This task is about writing a small article explaining the release engineering of NetBSD.
56: *Tags*: research overview
58: * **Task: Create an overview of the NetBSD src layout**: There is the manpage hier(7), which describes the directory layout of a running NetBSD system.
59: To make it easier for beginners to find things inside src, an equivalent document for the sources of NetBSD.
60: Even if you're not fond with mdoc, researching this and gathering the information (e.g. in plain ASCII or markdown) would be a great benefit, and somebody who likes mdoc can then convert it to a system manpage.
61: *Tags*: research overview man
63: * **Task: Howto: Update the system from binaries**: There is the new tool written in shell named sysupgrade (to be found in pkgsrc/sysutils/sysupgrade), which updates the system in binaries for you. Though it is nice, you may have reasons to not use it for an update (e.g. non-standard systems, or some components may not change).
64: This is why you should document the single tasks sysupgrade does (and why) and fill it with examples, in the end creating an howto which resembles the work done by sysupgrade.
65: [sysupgrade usage](http://www.netbsd.org/docs/guide/en/chap-upgrading.html)
66: *Tags*: Documentation research shell howto
68: * **Task: Howto: Getting in touch with NetBSD**: If you have a problem, there are several ways to get in touch with NetBSD people: BSD user groups, mailing lists, IRC, problem reports... Which one is the best for which issue?
69: Document the single methods for contacting others and categorize them by the task they're useful for.
70: *Tags*: Documentation howto
72: * **Task: Howto: Install additional software in NetBSD**: With NetBSD, you have three major ways to install additional software: pkgsrc, pkg_add and pkgin.
73: Which one is to use for which use case, what are their benefits, their merits? Document them, and give a small introduction of the needed tools and their usage (package installation, package deletion, package information).
74: *Tags*: Documentation howto
76: * **Task: Howto: Dual-boot NetBSD**: Having NetBSD not only as the single operating system, even if only for trying, is a common setup.
77: Of course you can dual-boot NetBSD with its internal bootloader as well as with grub and grub2.
78: These possibilities should be documented, and a howto how to dual-boot NetBSD should be created, for any scenario (NetBSD installed before main OS, and main OS installed before NetBSD).
79: *Tags*: Documentation howto research
81: * **Task: Howto: Encrypt the hard disk with NetBSD**: NetBSD has its very nice cryptographic device driver cgd. Apart from being already described in the guide: http://netbsd.org/docs/guide/en/chap-cgd.html
82: An explicit howto how to do this (in short) and how to do this during the installation, is the issue of this task.
83: Though cgd will be in sysinst for the next version of NetBSD, the current ones are still without, so there should be a special emphasis of how to add cgd during system installation.
84: *Tags*: Documentation howto
86: * **Task: Howto: Running usermanagement with LDAP and Kerberos**: Having NetBSD being a server is a common setup. Additionally to all the LDAP and Kerberos setup tutorials in the web, an explicit tutorial how to use NetBSD as an LDAP and Kerberos server would be nice.
87: This means you shouldn't reproduce all the other tutorials about the gory internals, but rather describe what has to be done which is NetBSD-specific (which packages have to be installed, where their configuration files lie, etc.) and just a short chapter about what is needed for the rest, with a reference to the original OpenLDAP and Heimdal/MIT documentation.
88: *Tags*: Documentation howto
90: * **Task: Howto: Running a webserver with Apache**: As well as the aforementioned task with OpenLDAP and Kerberos, a howto what to do with Apache in NetBSD would be good.
91: This should also include a reference to the already included bozohttpd, which may be suited better in some cases.
92: *Tags*: Documentation howto
94: * **Task: Howto: Using LVM to manage your disks**: There is already a chapter about the logical volume manager in NetBSD: http://netbsd.org/docs/guide/en/chap-lvm.html
95: This task is about not having a whole chapter about it, but rather a small and comprehensive howto how you would manage logical volumes with NetBSD instead of reading through the whole chapter.
96: *Tags*: Documentation howto
98: * **Task: Document integrated tools in NetBSD**: Apart from the famous web server and ftp server choices, there are smaller ones already integrated to NetBSD, as well as other smaller tools a user should know.
99: The goal is to create a comprehensive (!) list of full software packages that are already included in the base distribution.
100: In the document src/doc/3RDPARTY there is already a list of imported software, but there are more tools which are NetBSD-inherent themselves or contained in a larger package that is just listed as a whole there.
101: *Tags*: Documentation overview research
103: * **Task: Into: Disk and partition management with NetBSD**: Additionally to the gpt and mbr confusion, NetBSD has two other systems that add complexity to disk management: Disk wedges (dk(4)) and Unix disklabels (disklabel(5)).
104: You should write an article that introduces the reader to these systems, how they interact, and what their use cases are.
105: *Tags*: Documentation
107: * **Task: Compare init systems with each other**: Additional to the historical ones (SysV and BSD), systemd recently added another init system to the Unix world.
108: An objective comparison of these three systems (if there are other major ones, add them, maybe upstart?) would be nice. Not in the sense of showing their features side-by-side, but simply describing how they work and how you do things yourself.
109: In the end, you should have created a small article that enables anyone using one of these systems to switch to the other one just by reading this article.
110: *Tags*: Comparison research Unix
112: * **Task: Rewrite system configuration in the guide**: January this year, we got a new configuration menu for the installer: http://mail-index.netbsd.org/tech-install/2012/01/23/msg000223.html
113: The chapter in the guide about system configuration is still the old one: http://netbsd.org/docs/guide/en/chap-exinst.html#exinst-system-configuration
114: Your task is to rewrite this paragraph, add a new screenshot such that it fits the new configuration menu.
115: *Tags*: Documentation howto
117: * **Task: Document different time structures**: We have several time structures like `time_t`, `struct timespec`, `struct timeval`, `struct tm` and so on. Document all of them as a time(5) manpage such that a programmer can see all of them at once, in comparison. As we have time zone sensitive and time zone independent representations, figuring out conversions between local time and UTC from manual pages is hard and should also be documented in that manpage.
118: *Prerequisites*: C coding skills (just reading)
119: *Tags*: Documentation C man
122: ### Conversion
124: * **Task: Convert articles from the website to wiki articles**: There are several articles on the website (like http://netbsd.org/docs/misc/index.html) which should be converted to wiki articles.
125: On the way, you could separate obsolete articles from newer ones.
126: Though this work could also partially be done by a tool like pandoc, the articles on the website have different format: Sometimes docbook, sometimes html, sometimes a mix of them. And pandoc doesn't result in such good results as hand-conversion might do.
127: *Tags*: Conversion wiki
129: * **Task: Investigate and document Markdown to PDF and text conversion**: Propose a method for converting NetBSD Guide Markdown pages into PDF and text, so that they can be delivered with releases. Note the information (description, source location, home page, build method) so that a pkgsrc package (or packages) can be built using the proposed tools (the tools chosen must be compilable for NetBSD, and other free Unix-like systems).
130: *Tags*: Markdown, NetBSD, pkgsrc
132: * **Task: Convert the NetBSD Guide from DocBook to Markdown**: There are already tools to convert docbook to markdown (e.g. pandoc), so they have to be applied. The results have to be checked whether they are useful, and then every chapter should be a single wiki article, with one overview, such that the user optimally doesn't see the difference between the website and the wiki guide.
133: The guide: http://www.netbsd.org/docs/guide/en/index.html
134: The sources: http://cvsweb.netbsd.org/bsdweb.cgi/htdocs/docs/guide/
135: *Tags*: Conversion wiki
137: * **Task: Create a pkgsrc package to get the wiki offline**: The NetBSD wiki can be fetched via cvs or rsync. As it is going to be filled up with information, you might want to have it offline.
138: The goal of this task is to create a pkgsrc package which depends on the tools necessary for offline-viewing of the wiki (this could also be just the integrated if you consider Markdown readable enough) and fetches the wiki.
139: All in all a simple package with few dependencies if any and one or two wrapper scripts.
140: *Tags*: Conversion wiki
142: * **Task: Convert installation notes to markdown**: Currently, the installation notes as in http://ftp.netbsd.org/pub/NetBSD/NetBSD-5.1.2/i386/INSTALL.html are constructed with mdoc from distrib/notes.
143: The task is to research whether it is possible to convert these articles to markdown, and, if possible, do so.
144: There might be many inclusions etc. to get the original structure, but even the result of *what* has to be done without the actual conversion would be neat.
145: *Tags*: Conversion wiki research
148: ### Code
150: * **Task: Add an web interface to apropos**: Last year's Google Summer Of Code project was creating a new apropos(1). Though the current version already has a web interface, adding CSS and appropriate HTML to the web interface would be nice to integrate it to other websites.
151: Though the source code is written in C, C knowledge is not necessary. You just have to extract the HTML and pseudo-understand what the code around it does, i.e. in which cases the single actions are taken.
152: The file which would be modified is apropos-utils.c which can be seen here: https://github.com/abhinav-upadhyay/apropos_replacement/tree/cgi
153: *Tags*: C CSS HTML Web Design
156: ### Outreach
158: * **Task: Compare NetBSD with other operating systems of its kind**: NetBSD is an operating system which targets people who like the cleanness of a system, and mostly already have Unix or Linux experience.
159: As such, there are other operating systems which fall into the same audience as NetBSD does, which are at least Slackware, Arch Linux, Gentoo, OpenBSD, FreeBSD, DragonFly.
160: This task is about researching what other distros are out there which are close to NetBSD's principles and use cases (distrowatch.org might be a good starting point), and how they are different.
161: After having collected facts, maybe a simple overview of the community (what kind of people are there, what do they want?), you should create an article which lists all those and describes their differences to NetBSD.
162: You could also try interviewing some people what their view of the communities and the operating systems is and try to evolve your own opinion about them all.
163: *Tags*: Research comparison distribution Unix Linux
165: * **Task: Analyze NetBSD's users**: NetBSD is a very universal operating system. Some people run it on their 20 years old VAXen, others on their recent desktop computer or server, or on their tiny ARM box as a router.
166: As the aforementioned task (which is rather about the others out there), this task is about doing an in-depth analyzation of NetBSD itself. What kind of users and what kind of developers are out there? Look at the mailing lists to get an impression about the community and the developers and what their goals are.
167: This task is also about thinking about some statistical methods you could use. What data is available you could easily analyze, what are the metrics? Do other distributions have the same data available, so you could eventually run these statistics on other operating systems?
168: Besides being a gci task, thinking about these statistics, you could also create a nice website analyzing distributions based on statistical methods.
169: *Tags*: Research comparison distribution unix statistics
171: ### Marketing/User Interface
173: * **Task: Create NetBSD wallpapers**: Currently, there are nearly no NetBSD wallpapers. The combination of beastie, the flag and the old logo (daemons on old computers), plus the very smooth NetBSD colours (orange, grey, white) should be a resource for nice wallpapers.
174: If you're fine with drawing on a computer or graphical programs (like The Gimp or Photoshop), this might be a nice and very creative task for you.
175: *Tags*: Graphics marketing
177: * **Task: Create an icon set for NetBSD - research**: To provide a nice graphical user interface, as well as prettifying the wiki and the website, having some buttons and icons would be nice.
178: This task is about gathering and writing down what sizes are useful, and what kinds of icons are needed (and what they could be used for).
179: Tags: Graphics research
181: * **Task: Create an icon set for NetBSD - graphics**: In addition to the previous task, creating those icons is still needed. You would have to think about an artwork concept, how these icons should look overall and creating the single icons that are specified.
182: This task could be fulfilled multiple times, and if you succeed well, it would be nice if we could stay in touch with you about this in the future (like adding further graphics).
183: *Tags*: Graphics creativity
185: * **Task: Create smaller NetBSD artwork**: NetBSD does not have much artwork. Except from the aforementioned wallpapers and icons sets, multiple smaller artworks would be nice as well.
186: This includes drawing comics, creating a CD label, the image of a flash drive with NetBSD on it or e.g. a Beastie with a NetBSD flash drive, such things.
187: If you want to do this task, even if you don't know what to do, just contact us. We can tell you some ideas what to do, and if you already have one, approve it is suited for us.
188: *Tags*: Graphics creativity
190: ### Quality Assurance
192: * **Task: Try out various desktop scenarios, report errors**: Modern desktop environments like Xfce, KDE, Gnome or LXDE are mostly written for Linux. As such, it is important to try them on NetBSD and report their errors. Plus, checking the ease of installation via pkgsrc - which packages have to be installed, how intuitive is their name, their installation? Everything should be as easy as possible.
193: This task also refers to the task of creating a tutorial - maybe doing this first, and then creating the tutorial would be nice. The tutorial could either be updated on the fly when the reported bugs are corrected, or will be held back until the process is as easy as it should be.
194: This also includes bug-checking for light-deskop, the preferred package for a NetBSD desktop.
195: *Tags*: desktop quality
197: * **Task: Make NetBSD a music or video player**: NetBSD could as well serve as a music (mpd) or video player. You have to research which packages are needed for such a use case, and document it in a tutorial.
198: Ideally, create a pkgsrc meta package including all the dependencies.
199: Report bugs you find on the way.
200: If you
201: *Tags*: desktop quality research multimedia
205: ## Older tasks
207: Please try to convert these tasks, if applicable, with a nicer description to
208: the new ones.
210: ### Embedded project (Doc, Research)
212: Describe and document some embedded usage,
213: e.g. making NetBSD run on machine without:
215: * keyboard and video ports
216: * above and serial port
218: #### Possible embedded usage
220: * Thin client: rdesktop or vnc to hardcoded server
221: * Home or SOHO router (wireless access point)
222: * Home or SOHO file storage
223: * Home or SOHO print server
225: It is preferred if NetBSD installation uses the least possible resources.
226: (E.g. try making it boot over network, or consider that it is to be made so in future.)
228: #### More notes on embedded systems
230: ##### Router
232: Take any SOHO router as example.
234: Adapt pfSense? Similar software?
236: ##### Home theater
238: Create music and/or video player. Perhaps desktop.
240: ### Thin client / Kiosk
242: Build thin client.
244: * install and configure graphical system (X server)
245: * make your NetBSD autologin and launch some application (imagine a kind of kiosk or game console)
246: * make your NetBSD ask login in graphical mode
247: * make your NetBSD autologin and launch graphical application
248: * configure and install VNC server
249: * make your NetBSD connect to VNC server
250: * configure and install RDP server
251: * make your NetBSD connect to RDP server
252: * boot your client over network
253: * make your client boot from CD or USB Flash, or CF card
255: It is preferred if NetBSD installation uses the least possible resources.
257: ### File server
258: Build personal file server.
260: Ideally, it should present HTTP(S), FTP(S), and SMB access to data.
261: Consider other access methods (SFTP, NFS, AFS/CODA, AppleTalk).
263: Ideally, it should implement web interface.
265: Bonus points if you make it work like Apple Time Capsule (already running NetBSD) or better,
266: e.g. implement periodic file system snapshots,
268: Separate tasks:
270: * provide access to your files via HTTP
271: * provide access to your files via FTP
272: * provide access to your files via SMB
273: * provide access to your files via NFS
274: * provide access to your files via SFTP
275: * create periodic file system snapshots on your NetBSD
276: * learn how to perform automatic periodic tasks
277: * make your NetBSD perform periodic file system snapshots
278: * try doing anything/everything above on headless system
279: * try automatising anything/everything above
281: ### Bluetooth access point (Doc, QA, Code)
283: * connect NetBSD to your phone (dial out)
284: * connect your phone or other computer to NetBSD via bluetooth
285: * provide different services via bluetooth connection ("push", network)
287: ### Backup and Recovery (Research, Doc, QA, Code)
289: #### Incremental backup scenario
291: Document it. Try different plans.
293: #### Recovery from bare iron (QA, Doc, Code)
295: Consider installation recovery scenario from bare system to configured server.
297: Try automatizing it.
299: #### Unattended installation (Research, Code)
301: Like above only using installation tools.
304: ### Live USB Flash image (Doc, Outreach, Code)
306: Perform and document how one does it.
308: Script it if possible.
310: Script cross-buildin if possible.
312: Consider thin client.
314: ### Installation tools (QA, Research, Doc, Code)
316: Try creating bootable media using fdisk, disklabel, installboot.
317: Decribe experience, propose improvements, implement them.
319: Build NetBSD on any other OS at your choice: FreeBSD, Linux, NT, or OSX.
321: Try creating bootable media using tools built on another OS.
322: Decribe experience, propose improvements, implement them.
324: Tools affected
326: * fdisk
327: * disklabel
328: * installboot
329: * perhaps others
331: For hardcore hackers (those wishing to learn how the stuff works).
333: ### Audio/Video broadcasting (network radio/TV broadcasting)
335: Build audio and/or video broadcasting server.
337: ### Telephony
339: Become VoIP provider!
341: ### Build system QA (QA, Code, Research)
343: Check all MK* variables, check how they affect builds,
344: suggest improvements or removal.
346: ### System Library project (Code, Doc, QA, Research)
348: Add a function call to a system library.
349: The function call does not need to be immediately useful (ideally we should provide several
350: suggestions) and in fact should not be very complex as the project contains the following
351: tasks with varying skills
353: * produce C code of function
354: * bump library minor version
355: * write nroff manpage
356: * handle Makefile changes
357: * handle set list changes
358: * write ATF testcase
360: ### Tests projects (Code, QA)
362: Create ATF tests for a section of library routines, such as:
364: * [[!template id=man name="atomic_ops" section="3"]]
365: * [[!template id=man name="bitstring" section="3"]]
366: * [[!template id=man name="bluetooth" section="3"]]
367: * [[!template id=man name="cdbr" section="3"]] and [[!template id=man name="cdbw" section="3"]]
368: * [[!template id=man name="inet" section="3"]] and [[!template id=man name="inet_net" section="3"]]
369: * [[!template id=man name="ethers" section="3"]], [[!template id=man name="iso_addr" section="3"]] and [[!template id=man name="link_addr" section="3"]]
370: * [[!template id=man name="regex" section="3"]]
371: * [[!template id=man name="sdp_data" section="3"]]
372: * [[!template id=man name="ssp" section="3"]]
373: * [[!template id=man name="string" section="3"]]
374: * [[!template id=man name="strings" section="3"]]
375: * [[!template id=man name="strtod" section="3"]], [[!template id=man name="strtol" section="3"]], [[!template id=man name="strtoul" section="3"]] and [[!template id=man name="strtoull" section="3"]]
376: * [[!template id=man name="uuid" section="3"]]
377: * (please add..)
CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb