URI: 
       index.md - sites - public wiki contents of suckless.org
  HTML git clone git://git.suckless.org/sites
   DIR Log
   DIR Files
   DIR Refs
       ---
       index.md (5935B)
       ---
            1 Project ideas
            2 =============
            3 Please read our [philosophy](/philosophy) for background information.
            4 
            5 Peer review
            6 -----------
            7 The suckless.org community will act as a rigid reviewer of the progress.
            8 
            9 General ideas
           10 -------------
           11 Our project ideas in general intend to focus on our innovative development
           12 environment from bare hardware to the graphical interface.
           13 
           14 * Idiomatic interfaces for developers (such as more advanced concepts for mail
           15   clients, messaging clients, music players, text editors).
           16 * Simple protocol interfaces for developers.
           17 * General userland enhancements to UNIX-like operating systems.
           18 * Foundations of a new windowing system for UNIX-like operating systems.
           19 * Improvements to our existing software projects and infrastructure.
           20 * Replacements of bloated existing software and libraries in a suckless way.
           21 
           22 
           23 Current small tasks
           24 -------------------
           25 * Write a gopher back-end using build-page.c:
           26   <https://git.suckless.org/sites/file/build-page.c.html>
           27   This should use the geomyidae gopher server and the gph output format.
           28   Difficulty: medium-rare.
           29 * Fix broken patches on the wiki. Difficulty: trivial-medium.  
           30   See: <https://gunther.suckless.org/patches/>
           31 * Fix broken links on the wiki. Difficulty: trivial.  
           32   See: <https://git.suckless.org/sites/file/checklinks.sh.html>
           33 * Fix typos and formatting errors on the wiki. Difficulty: trivial.
           34 
           35 
           36 Concrete ideas
           37 --------------
           38 The listed ideas generally require good knowledge of C and experience with
           39 UNIX-like operating systems. The difficulty ranges from medium to high.
           40 
           41 
           42 ### Suckless font rendering library
           43 
           44 There is libdrw in suckless now, which still uses xft and fontconfig.
           45 Fontconfig and xft are ugly and require too much internal knowledge to be
           46 useful. The next logical layer evolved as pango and cairo. Both of course added
           47 HTML formatting and vector drawing. This is not needed to simply draw some text
           48 somewhere. And this is what a suckless font rendering library should do: Give
           49 it a font string and render at some position the given font without having to
           50 care about font specifics.
           51 
           52 ***Requirements:*** C knowledge, some X11 knowledge and of course knowledge
           53 about the font formats and how to handle them.
           54 
           55 
           56 ### Write ld wrapper or replacement for static linking
           57 
           58 The GNU autotools such as automake and autoconf are completely unusable in
           59 non-chroot'ed cross-compile environments and often completely fail to produce
           60 statically linked libraries or executables. Also they are extremely slow and
           61 bloated.
           62 
           63 The stali build system is not using autotools for good reason, however many
           64 UNIX/Linux open source packages do. To create statically linked libraries out
           65 of the ld arguments we need an ld wrapper or re-implementation that creates
           66 static libraries or executables. This would enable us to build static libraries
           67 and executables out of any automake generated makefiles without the need to
           68 write make replacements or patching the build system of a particular package.
           69 
           70 The ld wrapper needs to be extended to also link against uclibc first and if
           71 that fails to fallback to glibc, in order to produce smaller executables in the
           72 general case.
           73 
           74 ***Requirements:*** Good C/UNIX knowledge is essential, knowledge about
           75 linking/linker internals are desirable.
           76 
           77 
           78 ### Write a decent mailing list Web archive system
           79 
           80 All web archive systems such as hypermail, pipermail, etc. have plenty
           81 drawbacks and are quite out-dated. This task requires to write a completely new
           82 web mailing list archiving tool that follows the thread view concepts found in
           83 the mutt MUA and which is designed with low footprint and efficiency in mind.
           84 
           85 We expect this tool as a stand-alone UNIX tool written in C or shell. To get
           86 started you could use [Dovecot](http://dovecot.org/) to produce a sanitized
           87 structure:
           88 
           89         printf "1 select inbox\n2 thread references us-ascii all\n3 fetch 1:*
           90         envelope\n4 logout\n" |
           91         /usr/local/libexec/dovecot/imap  2>/dev/null
           92 
           93 * <http://www.codinghorror.com/blog/2012/12/web-discussions-flat-by-design.html>
           94 
           95 ***Requirements:*** Good C/Shell/HTML knowledge would be desirable. Must not
           96 use JavaScript.
           97 
           98 
           99 ### Write cookie handler for surf
          100 
          101 The biggest disadvantage of [surf](//surf.suckless.org) is sloppy cookie
          102 handling. libwebkit and libsoup (which are used for HTTP) were never designed
          103 to run in multiple processes simultaneously.
          104 
          105 This task requires writing a new cookie handler in surf which:
          106 
          107 * creates a nice human-readable cookie file
          108 * is able to run in multiple concurrent processes
          109 
          110 ***Requirements:*** Good knowledge of C and POSIX file locking. Basic knowledge
          111 of GTK and its other evil friends.
          112 
          113 
          114 ### Gopher services
          115 
          116 Gopher is a sane protocol which has hierarchy in its design. It allows the
          117 abstraction of a mass of information in a filesystem. The goal of this meta
          118 project is to find ideas how to implement gopher services to easily access the
          119 web and new information.
          120 
          121 See the
          122 [protocol](https://en.wikipedia.org/wiki/Gopher_%28protocol%29#Protocol) for
          123 how easy it is to write a `menu`, which can be seen as a directory.
          124 
          125 * [gopherproject.org](http://www.gopherproject.org)
          126 * [gopher proxy](http://gopher.floodgap.com/gopher/)
          127 * [Gopher wikipedia article](https://en.wikipedia.org/wiki/Gopher_%28protocol%29)
          128 * [geomyidae](http://git.r-36.net/geomyidae/)
          129 
          130 Anyone creating a gopher interface to suckless.org will get a bonus.
          131 
          132 ***Requirements:*** Just some shell scripting and a way to setup a gopher
          133 daemon is required. Everyone can do this.
          134 
          135 
          136 ### A sane backend for surf
          137 
          138 There is dillo, netsurf and abaco which implement HTML. The problem is
          139 JavaScript and extensions to replace webkit as the big dependency hell for web
          140 rendering in surf.
          141 
          142 If you prepare to work on this project, plan ahead in recruiting more
          143 developers. You will need them.
          144 
          145 ***Requirements:*** Very good C knowledge, a very good knowledge in web
          146 standards and how to strip them down to the suckless level. ***Difficulty
          147 level:*** Probably impossible.