software basic needs.shtml (6162B)
- <!DOCTYPE html>
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <!--#include file="/templates/head.shtml" -->
- <title>Software basic requirements — lanodan’s cyber-home</title>
- </head>
- <body>
- <!--#include file="/templates/en/nav.shtml" -->
- <main>
- <h1>Software Basic Requirements</h1>
- <p>
- What a kind of software (or feature included in it) needs to have before it's deemed as something better than a proof of concept / prototype. This list is quite Unix-like oriented but is made to apply to any platform worth using.<br />
- A lot of software doesn't have half of how they should work, this is why I had to do this page which should never have existed in the first place outside of a book like "Programming/Design for Dummies" or laws.
- </p>
- <h2>All of them</h2>
- <ul>
- <li>Documentation of the formats and public interfaces</li>
- <li>An official contact method: chatroom, email, mailing-list/forum/newsgroup, …</li>
- <li>A documented way to report security issues</li>
- <li>Detailed changelog</li>
- <li>Screenshot or other preview method</li>
- <li>Consider each dependencies (including indirect ones) as a liability, they must pick direct dependencies lightly</li>
- <li>Consistent design, for example: Either integrates into the platform like a native app or doesn't like most games</li>
- <li>No automatic updates and <em>absolutely</em> no automatic remote code execution</li>
- <li>Doesn't saves any data on the disk without user's consent</li>
- <li>Doesn't crashes down when the environment it's in returns an error or refuses an action</li>
- <li>Goes towards enhancing the rights and self-control of the legitmate users (so Fuck <abbr title="Digital Restriction Management">DRM</abbr>)</li>
- <li>Treats unknown <code>text/</code> MIME-types as plain text (looking at you web browsers)</li>
- </ul>
- <p>User content: Explicit and informed, default answer is refusing, can be changed at any point in time</p>
- <h2>Open-Source Software</h2>
- <ul>
- <li>License that is approuved by the <abbr title="Open Source Initiative">OSI</abbr>/<abbr title="Free Software Foundation">FSF</abbr> or at least compatible with the <a href="https://opensource.org/osd">Open Source Definition</a></li>
- <li>Public developer discussion space (can be shared with the rest of the community)</li>
- <li>Public version control system</li>
- <li>Ability to send patches, better if an account isn't required (ie. via email instead of a forge)</li>
- </ul>
- <p><a href="https://en.wikipedia.org/wiki/Shared-source">Shared-source</a> is one example of something which isn't Open-Source as a release/workflow model yet can have some licences be <abbr title="Open Source Initiative">OSI</abbr>/<abbr title="Free Software Foundation">FSF</abbr> approuved. The idea of open-source is to develop everything in the open by default, the idea of shared-source is to only share selected bits of code (<a href="https://en.wikipedia.org/wiki/Open-core_model">Open-Core</a> is a similar thing).</p>
- <h2>Security critical software</h2>
- <p>Security-critial software <em>must</em> be open-source and evident as secure. Which means that it has to be minimalist and readable.</p>
- <h2>Audio/Video Player</h2>
- <ul>
- <li>Formats: MKV, AU/.snd, MP3, Vorbis & Theora, WEBM, SRT (+ ASS)</li>
- <li>seeking + progress</li>
- <li>download progress</li>
- <li>volume control (not just mute/unmute)</li>
- <li>play/pause/stop</li>
- <li>subtitles/lyrics</li>
- <li>track selection (video, audio, subtitles)</li>
- <li>speed control</li>
- <li>playlist support</li>
- </ul>
- <p>Good examples: <a href="https://mpv.io/">mpv</a></p>
- <h2>Image Viewer</h2>
- <ul>
- <li>Formats: PNG, JPEG, TGA, GIF, (CBZ)</li>
- <li>Zoom in/out, reset to 100%, fit window/horizontaly/verticaly</li>
- <li>previous/next in a list of images, with configurable auto-play</li>
- </ul>
- <p>Good examples: <a href="https://feh.finalrewind.org/">feh</a></p>
- <h2>Document Viewer</h2>
- <ul>
- <li>Formats: plain text (ASCII/Unicode control characters), PDF/A, epub</li>
- <li>Text selection and clipboard support</li>
- <li>Page Jumps</li>
- <li>Zoom in/out, reset to 100%, fit window/horizontaly/verticaly</li>
- <li>Setting the fonts family/name+size and color palette/scheme</li>
- </ul>
- <p>Good examples: None so far ☹</p>
- <h2>Text Editor</h2>
- <ul>
- <li>Unicode support</li>
- <li>Text selection and clipboard support</li>
- <li>search and replace with regex support</li>
- <li>Support for bigger-than-ram files</li>
- <li>jump to line</li>
- </ul>
- <p>Good examples: ed, ex, vi, sam, acme, <a href="https://github.com/martanne/vis">vis</a></p>
- <h2>Networked software</h2>
- <ul>
- <li>Doesn't do any requests without the user consent (must show where it goes and what it sends)</li>
- </ul>
- <h2>Web Browser</h2>
- <ul>
- <li>Complete (not just the hostname) current URL displayed at all times</li>
- <li>Saving any requested data or link destination</li>
- <li>Developer tools (viewing each request, javascript console, …)</li>
- <li>Can control JavaScript and Images loading</li>
- <li>Audio/Video only plays with the user's consent</li>
- <li>Doesn't gives permission to devices without user's consent</li>
- <li>Doesn't gives hardware information or leaks it via fingerprinting</li>
- <li>Bookmarks</li>
- <li>UserScripts: JavaScript hooks to URL patterns written by the user (extensions are sadly vendor-locked)</li>
- </ul>
- <p>As it's networked software it needs to also have a controllable way to deny extra requests (aka AdBlocker)</p>
- <p>Good examples: lynx, elinks</p>
- <p>Worst examples: Mozilla Firefox, Anything Blink-based</p>
- <h2>See Also</h2>
- <ul>
- <li><a href="/notes/phone-required-features">Phone Required Features</a></li>
- <li><a href="/decreases%20of%20usability">Decreases of usability</a></li>
- <li><a href="http://www.catb.org/esr/writings/taoup/">The Art of Unix Programming</a></li>
- </ul>
- </main>
- <!--#include file="/templates/en/footer.shtml" -->
- </body>
- </html>