| hacking public-inbox |
| -------------------- |
| |
| Send all patches and "git request-pull"-formatted emails to our |
| self-hosting inbox at meta@public-inbox.org |
| It is archived at: https://public-inbox.org/meta/ |
| and http://4uok3hntl7oi7b4uf4rtfwefqeexfzil2w6kgk2jn5z2f764irre7byd.onion/meta/ (using Tor) |
| |
| Contributions are email-driven, just like contributing to git |
| itself or the Linux kernel; nevertheless, anonymous and pseudonymous |
| contributions will always be welcome. |
| |
| Please consider our goals in mind: |
| |
| Decentralization, Accessibility, Compatibility, Performance |
| |
| These goals apply to everyone: users viewing over the web or NNTP, |
| sysadmins running public-inbox, and other hackers working on public-inbox. |
| |
| We will reject any feature which advocates or contributes to any |
| particular instance of public-inbox becoming a single point of failure. |
| Things we've considered but rejected include: |
| |
| * exposing article serial numbers outside of NNTP |
| * allowing readers to inject metadata (e.g. votes) |
| |
| We care about being accessible to folks with vision problems and/or |
| lacking the computing resources to view so-called "modern" websites. |
| This includes folks on slow connections and ancient browsers which |
| may be too difficult to upgrade due to resource demands. |
| |
| Only depend on Free Software packages which exist in the "main" |
| section of Debian "stable" distribution; but continue to support |
| any LTS distros within their support window. |
| |
| In general, we favor mature and well-tested old things rather than |
| the shiny new. |
| |
| Avoid relying on compiled modules too much. Even if it is Free, |
| compiled code makes packages more expensive to audit, build, |
| distribute and verify. public-inbox itself will only be implemented |
| in scripting languages (currently Perl 5) and optional |
| Just-Ahead-of-Time-compiled C (via Inline::C) |
| |
| Do not recurse on user-supplied data. Neither Perl or C handle |
| deep recursion gracefully. See lib/PublicInbox/SearchThread.pm |
| and lib/PublicInbox/MsgIter.pm for examples of non-recursive |
| alternatives to previously recursive algorithms. |
| |
| Performance should be reasonably good for server administrators, too, |
| and we will sacrifice features to achieve predictable performance. |
| Encouraging folks to self-host will be easier with lower hardware |
| requirements. |
| |
| See design_www.txt and design_notes.txt in the Documentation/ |
| directory for design decisions made during development. |
| |
| See Documentation/technical/ in the source tree for more details |
| on specific topics, in particular data_structures.txt |
| |
| Optional packages for testing and development |
| --------------------------------------------- |
| |
| - Plack::Test deb: libplack-test-perl |
| pkg: p5-Plack |
| rpm: perl-Plack-Test |
| |
| - Plack::Test::ExternalServer deb: libplack-test-externalserver-perl |
| pkg: p5-Plack-Test-ExternalServer |
| |
| - Test::Simple deb: perl-modules-5.$MINOR |
| pkg: perl5 |
| rpm: perl-Test-Simple |
| |
| - XML::TreePP deb: libxml-treepp-perl |
| pkg: p5-XML-TreePP |
| rpm: perl-XML-TreePP |
| |
| Email::MIME is optional as of public-inbox v1.5.0 but still |
| used for maintainer comparison tests: |
| |
| * Email::MIME deb: libemail-mime-perl |
| pkg: p5-Email-MIME |
| rpm: perl-Email-MIME |
| |
| Faster tests |
| ------------ |
| |
| The `make test' target provided by MakeMaker does not run in |
| parallel. Our `make check' target supports parallel runs, and |
| it also creates a `.prove' file to optimize `make check-run'. |
| |
| The prove(1) command (distributed with Perl) may also be used |
| for finer-grained testing: prove -bvw t/foo.t |
| |
| If using a make(1) (e.g. GNU make) with `include' support, the |
| `config.mak' Makefile snippet can be used to set environment |
| variables such as PERL_INLINE_DIRECTORY and TMPDIR. |
| |
| With PERL_INLINE_DIRECTORY set to enable Inline::C support and |
| TMPDIR pointed to a tmpfs(5) mount, `make check-run' takes 6-10s |
| (load-dependent) on a busy workstation built in 2010. |
| |
| Perl notes |
| ---------- |
| |
| * \w, \s, \d character classes all match Unicode characters; |
| so write out class ranges (e.g., "[0-9]") if you only intend to |
| match ASCII. Do not use the "/a" (ASCII) modifier, that requires |
| Perl 5.14 and we're only depending on 5.10.1 at the moment. |