Annotation of wikisrc/projects/code-in.mdwn, revision 1.79

1.43      jdf         1: **Contents**
1.1       asau        2: 
1.45      jdf         3: [[!toc]]
1.42      jdf         4: 
1.45      jdf         5: # Google Code-In (GCI)
1.43      jdf         6: 
1.73      leot        7: [Google Code-In]( is a project
                      8: like [Google Summer Of Code]( But this
                      9: time, there are not university students, but 13-17 years old people the
                     10: targeted audience. Previous Code-In organisations:
1.71      leot       11: 
1.45      jdf        12:  * [Code-In 2010](
                     13:  * [Code-In 2011](
1.71      leot       14:  * [Code-In 2012](
1.45      jdf        15: 
                     16: Code-In differs from Summer Of Code also in not having a single task for one 
                     17: student, but creating a large number of tasks and then having the students pick 
                     18: the ones they want to work on. Thus, it is not suited for large projects, but 
                     19: for small tasks like writing howtos, fixing bugs.
                     21: All the tasks should be completable within hours or up to three days. To get an
                     22: idea of how much a single task should be and what kind of they could be, look
1.73      leot       23: at
                     24: [Examples of Google Code-in Tasks](
                     25: page.
                     27: For more information about Google Code-in please read the [Getting Started
                     28: Guide](
                     29: and [Google Code-in 2016 Contest
                     30: Rules](
                     32: For any questions please reach us in `#netbsd-code` IRC channel at
1.79    ! maya       33: [](!
1.45      jdf        34: 
                     35: **NetBSD participated in Code-In 2012.** You can find the results 
                     36: [[here|code-in_2012]]. The status of integrating Code-In's work to NetBSD can 
                     37: also be read there.
1.25      mbalmer    38: 
1.45      jdf        39: ## Goals as stated by Google
                     40:  1. **Code**: Tasks related to writing or refactoring code
                     41:  1. **Documentation/Training**: Tasks related to creating/editing documents and
                     42:     helping others learn more
                     43:  1. **Outreach/Research**: Tasks related to community management,
                     44:     outreach/marketing, or studying problems and recommending solutions
                     45:  1. **Quality Assurance**: Tasks related to testing and ensuring code is of high
                     46:     quality
                     47:  1. **User Interface**: Tasks related to user experience research or user
                     48:     interface design and interaction
1.41      jdf        49: 
1.45      jdf        50: ## Tasks
1.41      jdf        51: 
1.45      jdf        52: There were some tasks left, and there might be more ideas over the following 
1.72      leot       53: year to participate in Code-In 2016 again.
1.28      jdf        54: 
1.33      jdf        55: ## Used tags
1.29      jdf        56: If you want to search for a tag, just search this site for "Tag: $TAGNAME".
                     57: Used tags are (categories are not tagged):
1.31      jdf        58: 
1.45      jdf        59:  * *man* - tasks related to writing on or working with manpages
                     60:  * *network* - tasks related to networking (including firewalls)
                     61:  * *system* - tasks related to the system itself, either kernel or system level
                     62:    things
                     63:  * *service* - tasks involving services running on the system (as compared to
                     64:    *system*)
                     65:  * *overview* - tasks related to getting and documenting an overview
                     66:  * *howto* - tasks involving the creation of a howto
                     67:  * *comparison* - tasks involving the comparison of different solutions
                     68:  * *research* - tasks involving active research by the student
                     69:  * *ui* - tasks involving the user interface (mostly graphical)
                     70:  * *graphics* - tasks related to creating graphics
1.29      jdf        71: 
1.45      jdf        72: ## Tasks
1.29      jdf        73: 
1.45      jdf        74: ### Code
1.34      jdf        75: 
1.55      wiki       76: * **Task: Serve HTML man pages using NetBSD's "bozohttpd" server**
                     77:   NetBSD installs man pages in different formats, one of them being html pages.  The goal of this task is to write a Lua script for
1.69      leot       78:   the [[!template id=man name="bozohttpd" section="8"]] web server, i.e. NetBSD's integrated webserver, that displays a webform where a man page section and the
1.55      wiki       79:   name of a man page can be entered (see [[!template id=man name="httpd" section="8"]]).
                     80:   When the form is submitted, the Lua script will do a lookup if there is a corresponding
1.58      asau       81:   man page in html form and deliver to the web-browser.  Contact mbalmer@ if you have questions.
                     82:   *Prerequisites*: Lua, HTML.
                     83:   *Tag*: man
                     84:   *Tag*: service
1.55      wiki       85:   *Tag*: ui
1.45      jdf        87: * **Task: Create ATF tests**: [[atf]] is the automatic test framework for NetBSD. We strive to have automatic tests for all the important parts of our system: libraries, syscalls, binaries, etc.  
                     88:   Your task is to write such tests. You should read the [[tutorial|atf]] about how to write an atf test, and then you can start testing things.  
                     89:   As testing is an endless task, here are just a few ideas about which items could be tested:
                     90:   * [[!template id=man name="atomic_ops" section="3"]]
                     91:   * [[!template id=man name="cdbr" section="3"]] and [[!template id=man name="cdbw" section="3"]]
                     92:   * [[!template id=man name="inet" section="3"]] and [[!template id=man name="inet_net" section="3"]]
                     93:   * [[!template id=man name="ethers" section="3"]], [[!template id=man name="iso_addr" section="3"]] and [[!template id=man name="link_addr" section="3"]]
                     94:   * [[!template id=man name="strtol" section="3"]], [[!template id=man name="strtoul" section="3"]] and [[!template id=man name="strtoull" section="3"]]
                     95:   * [[!template id=man name="uuid" section="3"]]
1.28      jdf        96: 
1.45      jdf        97:   Though this task is originally rather considered quality assurance, the actual test writing is only coding work (whether the test succeeds or not, is up to the original author of the library or tool).  
                     98:   Every *single written test* is considered as **one task**. If you think there is another test that should be added, but is not listed here, feel free to contact us.  
                     99:   The tests should be written in either C or sh, depending on the test subject.  
                    100:   *Prerequisites*: sh or C  
1.29      jdf       101:   *Tag*: man  
                    102:   *Tag*: research
1.59      asau      104: * **Task: create a pkgsrc package**: choose one software package from the [categorized list](, create pkgsrc package.
                    105:   Your task is to create a package, check that it runs, and describe how to do a [smoke test](
                    106:   For each software package there are three formal tasks of different complexity (unless noted):
                    107:   * make draft package that passes configure phase (medium complexity);
                    108:   * make draft package that passes build phase (medium complexity);
                    109:   * complete package that passes packaging checks and creates binary package (easy).
1.68      asau      110:   *Tags*: code, pkgsrc
1.59      asau      111: 
1.70      leot      112: * **Task: Avoiding TeX dependencies for [[!template id=pkg category="meta-pkgs" name="netbsd-www"]]**
1.62      asau      113:   It has been reported that one of obstacles when maintaining NetBSD documentation is the cost of update of tool packages.
                    114:   Surface analysis reveals that a lot of time may be spent on building TeX packages which are used to generate printable documentation in PostScript and PDF. The latter may be unneeded (e.g. when only HTML is of concern).
1.69      leot      115:   The task is to drop dependency on TeX packages in the whole toolchain pulled by [[!template id=pkg category="meta-pkgs" name="netbsd-www"]] in order to make it optional, if it really matters.
1.62      asau      116:   *Tags*: code, pkgsrc
1.70      leot      118: * **Task: Search engine (Lucene)**
1.62      asau      119:   Status: Reopened Time to complete: 96 hrs Mentors: Radoslaw Kujawa, Aleksej Saushev Tags: 
1.69      leot      120:   These days we have to search for information not only on WWW but on our personal machines either. Your task is to research in setting up text search engine Lucene in any (or all, at your option) of use cases: just personal desktop, web site, mailing list archive.
1.62      asau      121:   We have outdated work-in-progress package in pkgsrc-wip. Update it, make sure it works with OpenJDK7. Test it with all acceptable options. Preferrably, make it build from source as well.
                    122:   Provide instructions how to deploy Lucene itself and all needed components, if it isn't done automatically already.
                    123:   Provide instructions how to setup and test functionality.
                    124:   If possible, automate everything you can.
                    125:   It is possible, that you meet blocking problem. Good problem report (step-by-step instructions to reproduce, description of what expected and observed results are) and explanation why it constitutes blocking problem for this task are accepted as successful task completion.
                    126:   It is possible that some things are not essential to setup. Clear explanation why some requirement is not met is accepted.
                    127:   In case you have further questions when working on the task, don't hesitate to contact us on #netbsd-code.
                    128:   *Tags*: desktop, web, java, pkgsrc, code
1.70      leot      130: * **Task: Make ApacheDS run on NetBSD**
1.62      asau      131:   Traditionally directory services in open-source systems are built around OpenLDAP, which is tricky to setup. There exist alternative implementations of LDAP directory software. One of them is ApacheDS, but the software is written in Java, which brings different challenges.
                    132:   Provide instructions (step-by-step, where needed) how to make ApacheDS work on NetBSD, including instructions how to download ApacheDS itself, all components it depends on (identify them either by reading documentation or by searching the web), how to make it run.
                    133:   You are to provide starter script that sets all necessary environment variables and passes correct flags to Java VM from OpenJDK7 package.
                    134:   You are to provide instructions how to test, if the server works (e.g. by providing instructions how to add, search, and remove entries in directory).
                    135:   This is research task, there may be no solution, it is possible that you encounter blocking problem. In that case, you are to report steps to reproduce the problem and explanation why you think it is blocking (this certifies as successful task completion too).
                    136:   *Tags*: ldap, sso, java
1.29      jdf       139: ### Outreach/Research
1.28      jdf       140: 
1.29      jdf       141: * **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.  
                    142:   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.  
                    143:   This task is about researching what other distros are out there which are close to NetBSD's principles and use cases ( might be a good starting point), and how they are different.  
                    144:   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.  
1.28      jdf       145:   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.  
1.29      jdf       146:   *Tag*: comparison  
                    147:   *Tag*: research  
                    148:   *Tag*: system  
                    149:   *Tag*: overview
                    151: * **Task: Compare firewall solutions in NetBSD**: NetBSD has several firewall solutions on board: ipf, npf, pf, even more (you should research that).  
                    152:   For the beginner, it is not clear what they are capable of, how fast they are and what their syntaxes look like.  
                    153:   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.  
                    154:   *Tag*: comparison  
1.30      jdf       155:   *Tag*: network  
1.29      jdf       156:   *Tag*: research
1.2       asau      157: 
1.46      wiki      158: * **Task: Survey documentation structure of other projects**: There are many open source projects which exist not only for years, but also for decades (which e.g. NetBSD also has with 20 years). For all of them, documentation is an important issue, and most, if not all projects have not mastered writing documentation.  
                    159:   In this task, you have to choose one of the projects listed below. If you want to research another project not listed, please ask a judge about it.  
                    160:   Then, you have to research the documentation of these projects (what sources are there, how are they used, which software do they use, which formatting language, etc. (what sources are there, how are they used, which software do they use, which formatting language, etc.), plus finding a way of determining the project's opinion of their documentation (a docs@ mailing list might be a good start, like e.g. is). All in all, you should do nearly the same as the task "Create an overview of NetBSD documentation", except that you don't have to be that much in depth, but you should also research the technical and administrative background.  
1.36      jdf       161:   In the end, you should write a paper with the results of the survey and a small text, at least one page at all.  
                    162:   This task can be fulfilled multiple times, once for each project.  
1.45      jdf       163:   *Projects*: FreeBSD, OpenBSD, DragonFly, Gentoo, Slackware, PostgreSQL  
1.36      jdf       164:   *Tag*: research  
                    165:   *Tag*: comparison  
                    166:   *Tag*: overview
                    168: * **Task: Analyze and document (pseudo-)random number generators**: For several purposes like key creation, initial vectors for some protocols, IP sequence numbers, an operating system is required to have a (pseudo) random number generator ((p)rng).  
1.69      leot      169:   Though some are implemented in hardware and the OS gives you the chance to interface them, you most probably just call the function [[!template id=man name="random" section="3"]] or open the device /dev/urandom or /dev/random, which is either in hardware or software, depending on what the operating system uses.  
1.36      jdf       170:   While the hardware rngs use some random noise as a source for entropy ("randomness"), software rngs use several sources like disk command execution times, network timing, mouse and keyboard usage, depending on the implementation.  
                    171:   Your task is to look at the prngs of the great Open Source operating systems, analyze how they work, what input they use, how large their pools are and what exactly is done when input or output occurs.  
                    172:   This task is once for each operating system which has a different rng (some operating systems share the same ones), but you should analyze the input sources for all OSes using that rng and do the analysis for NetBSD first.  
                    173:   You should write down your result in a paper at least two pages long.  
                    174:   While this task might take up more work than a usual task, it is a very interesting and demanding task especially if you are interested in mathematics or cryptography.  
                    175:   *Tag*: research  
                    176:   *Tag*: comparison
1.69      leot      178: * **Task: Illustrate how to use the framebuffer**: NetBSD features a generic framebuffer framework, called [[!template id=man name="wsfb" section="4"]]. It is already supported by Xorg by the xf86-video-wsfb driver, but it would be nice to investigate other useful ways to use it from userland. This task should illustrate exactly this, explaining and demonstrating how to write pictures on the framebuffer for instance.  
                    179:   Note that there is a generic framebuffer implementation for the i386, amd64 and macppc architectures, through the genfb(4) driver; it is known to work on the first two cases with qemu. Some help about how to enable it can be found in [[!template id=man name="boot" section="8"]] (see the "vesa" command). Also, some fixes and improvements to the relevant drivers may only be found in NetBSD-current at the moment.  
1.54      khorben   180:   *Prerequisites*: C (basic)  
                    181:   *Tag*: research  
                    182:   *Tag*: howto  
                    183:   *Tag*: system
1.61      asau      185: * **Task: Setup SNMP daemon**: Choose and setup SNMP daemon, describe what one can monitor and control using SNMP.
                    186:   *Tag*: research  
                    187:   *Tag*: system
                    188:   *Tag*: service
                    189:   *Tag*: network  
                    190:   *Tag*: howto
1.45      jdf       192: ### Quality Assurance
1.21      asau      193: 
1.46      wiki      194: * **Task: Research POSIX compliance**: POSIX is the (more or less) standard all Unixes orient on. It describes libraries to use as well as binaries every Unix should have (like cp, mv) and their behavior.
                    195:   You can find the standard on the Internet. Your task is to look for any non-trivial man page (i.e., more than a few options) and research whether the NetBSD behavior of this tool or library conforms to POSIX or not.  
1.45      jdf       196:   You should then insert this part into a list and document whether it complies to POSIX and if not, which differences are there.  
1.46      wiki      197:   As it is hard to determine the difficulty of a single part of the standard, this will be measured in lines. For every 1000 lines of the NetBSD versions of the man pages, this is one task.  
1.45      jdf       198:   The prerequisite is only for looking at libraries.  
                    199:   *Prerequisite*: C (reading)  
                    200:   *Tag*: research
1.69      leot      202: * **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, there is not a step-by-step introduction to how configure it.
1.76      kim       203:   The manpage of [[!template id=man name="npf.conf" section="5"]] gives an introduction, but nothing that could be used as a howto. Also refer to the examples in /usr/share/examples/npf. 
1.46      wiki      204:   The howto should contain a step-by-step introduction about how npf works, but also an introduction to the technical aspects of npf itself: What kind of rules and tables are there, how they are applied, etc.  
1.69      leot      205:   There is already a [howto by rmind](, this would have to be checked against errors, updated if needed and extended.  
1.45      jdf       206:   *Tag*: howto  
                    207:   *Tag*: network
1.21      asau      208: 
1.29      jdf       209: * **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.  
                    210:   The goal is to create a comprehensive (!) list of full software packages that are already included in the base distribution.  
                    211:   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.  
                    212:   *Tag*: overview  
                    213:   *Tag*: research
1.21      asau      214: 
1.29      jdf       215: * **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.  
                    216:   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.  
                    217:   This also includes bug-checking for light-deskop, the preferred package for a NetBSD desktop.  
                    218:   *Tag*: ui  
                    219:   *Tag*: research
1.69      leot      221: * **Task: Document the installation of the DeforaOS desktop environment**: The DeforaOS desktop is an alternative for a lightweight desktop environment, and is already packaged in NetBSD ([[!template id=pkg category="meta-pkgs" name="deforaos-desktop"]]) and via pkgsrc-wip. It could use more documentation though, including how to configure it properly.
1.40      khorben   222:   Bug reports will also be welcome of course, even more so with fixes.
                    223:   *Tag*: ui
                    224:   *Tag*: research
1.29      jdf       226: * **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.  
                    227:   Ideally, create a pkgsrc meta package including all the dependencies.  
                    228:   Report bugs you find on the way.  
1.30      jdf       229:   *Tag*: ui  
1.29      jdf       230:   *Tag*: research
1.75      sevan     233: * **Task: Describe how NetBSD boots**: Build NetBSD on any system (especially non-NetBSD) and try to create a bootable medium without using [[!template id=man name="makefs" section="8"]] or integrated wrappers.
1.29      jdf       234:   Creating a bootable disk is possible, but difficult and there is no comprehensive information about this. You have to try much until you get the real results.  
                    235:   The affected tools are
1.75      sevan     236:   * [[!template id=man name="fdisk" section="8"]]
                    237:   * [[!template id=man name="installboot" section="8"]]
                    238:   * [[!template id=man name="disklabel" section="8"]]
                    239:   * [[!template id=man name="gpt" section="8"]]
1.31      jdf       240: 
1.29      jdf       241:   In the end of this task, a small howto and some corrections for the manpages of the affected tools should be there.  
1.30      jdf       242:   *Tag*: system  
1.29      jdf       243:   *Tag*: howto
1.60      asau      245: ### Documentation
1.29      jdf       247: * **Task: Describe how to boot NetBSD on a gpt disk**: Currently, NetBSD supports booting from a gpt partition, but you cannot know how.  
1.75      sevan     248:   This task is about creating documentation how to use the tool [[!template id=man name="gpt" section="8"]] and maybe [[!template id=man name="installboot" section="8"]] how to create GPT labels, how they interact with MBRs as created by [[!template id=man name="fdisk" section="8"]], how wedges work on this, and how you would make it bootable.  
1.35      jdf       249:   You should also describe which problems you have and what people might edge on when trying to create a gpt-bootable disk.  
1.29      jdf       250:   *Tag*: howto  
                    251:   *Tag*: system
1.1       asau      252: 
1.5       asau      253: 
1.45      jdf       254: * **Task: Howto: Install additional software in NetBSD**: With NetBSD, you have three major ways to install additional software: pkgsrc, pkg_add and pkgin.  
                    255:   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).  
                    256:   *Tag*: howto  
1.36      jdf       257:   *Tag*: system  
                    258:   *Tag*: service
1.75      sevan     260: * **Task: Howto: Encrypt the hard disk with NetBSD**: NetBSD has its very nice cryptographic device driver [[!template id=man name="cgd" section="4"]]. Apart from being already described in the [guide](  
1.45      jdf       261:   An explicit howto how to do this (in short) and how to do this during the installation, is the issue of this task.  
                    262:   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.  
1.52      khorben   263:   Note that support for full-disk encryption has been introduced in NetBSD-current, in the form of a ramdisk (cgdroot.kmod). It still lacks official documentation at the moment, but was detailed [on the mailing-lists](  
1.45      jdf       264:   *Tag*: howto  
1.29      jdf       265:   *Tag*: system
1.1       asau      266: 
1.77      kim       267: * **Task: Howto: Protecting your system with veriexec**: There already is [a chapter in the Guide]( about veriexec, but there is no comprehensive guide how to activate it and how to check in all files in the distribution (there is [[!template id=man name="veriexecgen" section="8"]] for this.  
1.46      wiki      268:   Your task is to write a howto describing everything a user needs to know and needs to do to have a secure system with veriexec.  
1.45      jdf       269:   *Tag*: howto  
1.35      jdf       270:   *Tag*: system
1.45      jdf       272: * **Task: Convert articles from the website to wiki articles**: There are several articles on the website (like [this one]( which should be converted to wiki articles.  
                    273:   On the way, you could separate obsolete articles from newer ones.  
                    274:   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.  
                    275:   *Tag*: wiki
1.35      jdf       276: 
1.45      jdf       277: * **Task: Describe how to use NetBSD as a bluetooth access point**: With bluetooth, you can easily connect your computer to a mobile phone and let the phone use the network connection of the computer.  
                    278:   Your task is to describe how to do this: Connecting NetBSD via bluetooth to your phone and then provide different services (especially file transfer and network connection).  
                    279:   *Tag*: howto  
                    280:   *Tag*: system  
                    281:   *Tag*: network  
                    282:   *Tag*: service
1.35      jdf       283: 
1.69      leot      284: * **Task: Describe how to backup NetBSD**: Though NetBSD is much like other Unixes in this respect, backup is still something you should consider specially for every operating system. Which tools are available in the base distribution for backupping, like [[!template id=man name="dump" section="8"]] and [[!template id=man name="restore" section="8"]]?  
                    285:   Which one suits better, [[!template id=man name="pax" section="1"]], [[!template id=man name="dump" section="8"]] or even just rsync or other special backup solutions? What are their use cases?  
1.45      jdf       286:   What is a full, a differential, an incremental backup? What is the estimated space usage of them, depending on the backups?  
                    287:   How would you restore your system after a crash, which steps have to be taken to get a working system again?  
                    288:   After reading the resulting article, the reader should be able to decide for a backup scheme and solution and implement it without further research.  
                    289:   *Tag*: howto  
                    290:   *Tag*: system  
                    291:   *Tag*: research
1.35      jdf       292: 
1.69      leot      293: * **Task: Describe usage of Multicast DNS in NetBSD**: We have the "Multicast and Unicast DNS daemon" ([[!template id=man name="mdnsd" section="8"]]) in NetBSD, which can also be activated directly from the installer (which is one of a few chosen services).  
1.45      jdf       294:   To be really able to use it, you have to know what it is and what you can do with it.  
                    295:   So, your task is to research what Multicast DNS (or zeroconf) is, and document which of the features is already usable with NetBSD and which ones can be installed via pkgsrc, which ones are completely missing (but relevant).  
1.69      leot      296:   The [[!template id=man name="mdnsd" section="8"]] manpage and the Wikipedia page for zeroconf might be a good start for this.  
1.45      jdf       297:   *Tag*: howto  
1.36      jdf       298:   *Tag*: system  
                    299:   *Tag*: service  
1.49      khorben   300:   *Tag*: research
1.36      jdf       301: 
1.45      jdf       302: * **Task: Describe how to use NetBSD as an appliance**: NetBSD is often used for appliances, i.e. a small server serving only one single purpose. Though, there are no howtos describing how to set up a single appliance serving only one cause.  
                    303:   Though these howtos are targeted at creating a single appliance, they can also be used for other purposes.  
                    304:   Possible appliances would be:
                    305:   * **router** - NetBSD is very well suited for router appliances and often used for that. There is a special task which is about creating a howto how to configure npf and comparing the different firewall solutions NetBSD offers. This task would rather be about everything around, like the routing part, securing the machine, network management (e.g. for wireless access points), and maybe only one example configuration for the firewall (especially NATting). A good example for an existing appliance is pfSense
                    306:   * **file server** - NetBSD is also excellent as a file server, may it be either with nfs, smb, http, ftp or ftp over ssh as the transfer protocol. Your task would be to describe the packages which exist in pkgsrc and in NetBSD's base, and choose one special scenario for each protocol and give example configurations of the services. You should also mention RAIDframe, lvm and cgd briefly and what their use cases are. A good example for an existing appliance is FreeNAS or Apple Time Capsule (already running NetBSD).
                    307:   * **backup server** - though somewhat similar to a file server, a backup server has different requirements. On the one hand, you have to think about how to connect effectively for backups, e.g. with rsync or other special backup protocols. On the other hand, you have to take special care for data integrity and data security. You should also take file system snapshots into account.
1.53      khorben   308:   * **media server** - also similar to a file server, a media server has extra requirements. Some specific protocols may have to be deployed (UPnP/DLNA) and configured to support some client implementations in particular. Additional features, such as video transcoding, will be worth investigating as well.
1.34      jdf       309: 
1.45      jdf       310:   Every howto for an appliance is considered a single task.  
                    311:   As a special task, you could also create a shell script that fulfills the steps you mentioned in your howto, such that the user only has to execute this script to get an appliance. The prerequisite is only for this task.  
                    312:   If you can think of more possible appliances, maybe you can also use this as a task. If you want to work on a larger project (i.e. providing a whole derivate with one of these tasks), just tell us.  
                    313:   *Prerequisites*: sh  
                    314:   *Tag*: howto  
1.35      jdf       315:   *Tag*: research  
1.45      jdf       316:   *Tag*: service  
                    317:   *Tag*: system  
                    318:   *Tag*: network
1.47      khorben   319: 
1.51      khorben   320: * **Task: Write assembly examples for additional architectures**: there is currently a single assembly example in src/share/examples/asm/hello, for the PowerPC architecture. NetBSD works on many more though; these examples are about illustrating how, at the assembly layer. This task to write basic, functional assembly programs on more architectures; each program is one task. Some architectures may support multiple ABIs, and this should also be investigated and documented while writing each example.  
                    321:   Note that "hello", the classic "Hello, world!", is not the only possibility to demonstrate basic assembly on any given architecture; the implementation of other programs can be relevant, provided they illustrate more aspects of assembly coding for the target architecture.  
1.50      khorben   322:   *Prerequisites*: assembly  
                    323:   *Tag*: research  
1.47      khorben   324:   *Tag*: system
1.63      asau      325: 
1.64      asau      326: * **Task: Setup single sign-on (SSO) service using base Heimdal**
1.63      asau      327:   Write in clear terms what needs to be set up for implementing single sign-on service using Kerberos.
                    328:   Write step-by-step instructions for configuration of base Heimdal, BIND, OpenPAM, and other components as needed (both, for client and server).
                    329:   Provide instructions how to test functionality (steps how to make sure it works).
                    330:   Create a network with at least two machines. Make sure that your instructions apply to this configuration to (write separate sections, for client and for server, if needed).
                    331:   Provide instructions how to operate this setup (how to add-remove user accounts, to change-reset passwords, and so on).
                    332:   You are to make sure that you provide references to documentation for component you used (e.g. man pages, BIND Administrator Reference Manual).
                    333:   You are to make sure that you provide step-by-step instructions for what you did.
                    334:   You are to illustrate instructions with shell commands and configuration file snippets.
                    335:   *Tags*: security, sso, kerberos, documentation, howto
1.64      asau      337: * **Task: Describe how to become a VoIP provider**
1.63      asau      338:   SIP is a protocol used for VoIP communications.
                    339:   NetBSD was sometimes tried as a VoIP server, but there has been no howto yet how to do this.
                    340:   So, install an Asterisk or FreeSwitch or something else like that and describe how to use NetBSD as a VoIP server.
                    341:   *Tags*: howto, service
1.65      asau      342: 
                    343: ### User interface, user experience
1.69      leot      345: * **Task: Redesign interface of [[!template id=man name="disklabel" section="8"]]**
1.74      leot      346:   It should be possible and easy to use [[!template id=man name="disklabel" section="8"]] in command-line mode, so that the [[!template id=man name="disklabel" section="8"]] could be scriptable.
1.69      leot      347:   One of examples of better interface is [[!template id=man name="gpt" section="8"]].
1.65      asau      348:   *Tags*: ui, research
1.69      leot      350: * **Task: Redesign interface of [[!template id=man name="fdisk" section="8"]] to make it closer to [[!template id=man name="gpt" section="8"]]**
                    351:   It should be possible and easy to use [[!template id=man name="fdisk" section="8"]] in command-line mode, so that the [[!template id=man name="fdisk" section="8"]] could be scriptable.
                    352:   One of examples of better interface is [[!template id=man name="gpt" section="8"]].
1.65      asau      353:   *Tags*: ui, research
1.66      asau      354: 
                    355: * **Task: Window manager selection**
                    356:   Find out software that helps user to switch between window manager without session restart.
                    357:   Provide instructions how to set it up. Describe user experience.
                    358:   *Tags*: ui, research
1.67      asau      359: 
                    360: * **Task: analyze trends in community support channels**
                    361:   There exist multiple communication channels. They are organized around different technologies (mail, news, WWW, IRC, XMPP) and different patterns of usage (mail/news subscription, forum, wiki).
                    362:   The task is to analyze how communities are organized for different projects (for instance, FreeBSD, Gentoo, Fedora, Debian, Ubuntu), how communities solve related technological and social problems (like SPAM), analyze performance of channels.
                    363:   *Tags*: ui, research

CVSweb for NetBSD wikisrc <> software: FreeBSD-CVSweb