logo

blog

My website can't be that messy, right? git clone https://hacktivis.me/git/blog.git

software basic needs.shtml (6162B)


  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <!--#include file="/templates/head.shtml" -->
  5. <title>Software basic requirements — lanodan’s cyber-home</title>
  6. </head>
  7. <body>
  8. <!--#include file="/templates/en/nav.shtml" -->
  9. <main>
  10. <h1>Software Basic Requirements</h1>
  11. <p>
  12. 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 />
  13. 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.
  14. </p>
  15. <h2>All of them</h2>
  16. <ul>
  17. <li>Documentation of the formats and public interfaces</li>
  18. <li>An official contact method: chatroom, email, mailing-list/forum/newsgroup, …</li>
  19. <li>A documented way to report security issues</li>
  20. <li>Detailed changelog</li>
  21. <li>Screenshot or other preview method</li>
  22. <li>Consider each dependencies (including indirect ones) as a liability, they must pick direct dependencies lightly</li>
  23. <li>Consistent design, for example: Either integrates into the platform like a native app or doesn't like most games</li>
  24. <li>No automatic updates and <em>absolutely</em> no automatic remote code execution</li>
  25. <li>Doesn't saves any data on the disk without user's consent</li>
  26. <li>Doesn't crashes down when the environment it's in returns an error or refuses an action</li>
  27. <li>Goes towards enhancing the rights and self-control of the legitmate users (so Fuck <abbr title="Digital Restriction Management">DRM</abbr>)</li>
  28. <li>Treats unknown <code>text/</code> MIME-types as plain text (looking at you web browsers)</li>
  29. </ul>
  30. <p>User content: Explicit and informed, default answer is refusing, can be changed at any point in time</p>
  31. <h2>Open-Source Software</h2>
  32. <ul>
  33. <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>
  34. <li>Public developer discussion space (can be shared with the rest of the community)</li>
  35. <li>Public version control system</li>
  36. <li>Ability to send patches, better if an account isn't required (ie. via email instead of a forge)</li>
  37. </ul>
  38. <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>
  39. <h2>Security critical software</h2>
  40. <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>
  41. <h2>Audio/Video Player</h2>
  42. <ul>
  43. <li>Formats: MKV, AU/.snd, MP3, Vorbis & Theora, WEBM, SRT (+ ASS)</li>
  44. <li>seeking + progress</li>
  45. <li>download progress</li>
  46. <li>volume control (not just mute/unmute)</li>
  47. <li>play/pause/stop</li>
  48. <li>subtitles/lyrics</li>
  49. <li>track selection (video, audio, subtitles)</li>
  50. <li>speed control</li>
  51. <li>playlist support</li>
  52. </ul>
  53. <p>Good examples: <a href="https://mpv.io/">mpv</a></p>
  54. <h2>Image Viewer</h2>
  55. <ul>
  56. <li>Formats: PNG, JPEG, TGA, GIF, (CBZ)</li>
  57. <li>Zoom in/out, reset to 100%, fit window/horizontaly/verticaly</li>
  58. <li>previous/next in a list of images, with configurable auto-play</li>
  59. </ul>
  60. <p>Good examples: <a href="https://feh.finalrewind.org/">feh</a></p>
  61. <h2>Document Viewer</h2>
  62. <ul>
  63. <li>Formats: plain text (ASCII/Unicode control characters), PDF/A, epub</li>
  64. <li>Text selection and clipboard support</li>
  65. <li>Page Jumps</li>
  66. <li>Zoom in/out, reset to 100%, fit window/horizontaly/verticaly</li>
  67. <li>Setting the fonts family/name+size and color palette/scheme</li>
  68. </ul>
  69. <p>Good examples: None so far ☹</p>
  70. <h2>Text Editor</h2>
  71. <ul>
  72. <li>Unicode support</li>
  73. <li>Text selection and clipboard support</li>
  74. <li>search and replace with regex support</li>
  75. <li>Support for bigger-than-ram files</li>
  76. <li>jump to line</li>
  77. </ul>
  78. <p>Good examples: ed, ex, vi, sam, acme, <a href="https://github.com/martanne/vis">vis</a></p>
  79. <h2>Networked software</h2>
  80. <ul>
  81. <li>Doesn't do any requests without the user consent (must show where it goes and what it sends)</li>
  82. </ul>
  83. <h2>Web Browser</h2>
  84. <ul>
  85. <li>Complete (not just the hostname) current URL displayed at all times</li>
  86. <li>Saving any requested data or link destination</li>
  87. <li>Developer tools (viewing each request, javascript console, …)</li>
  88. <li>Can control JavaScript and Images loading</li>
  89. <li>Audio/Video only plays with the user's consent</li>
  90. <li>Doesn't gives permission to devices without user's consent</li>
  91. <li>Doesn't gives hardware information or leaks it via fingerprinting</li>
  92. <li>Bookmarks</li>
  93. <li>UserScripts: JavaScript hooks to URL patterns written by the user (extensions are sadly vendor-locked)</li>
  94. </ul>
  95. <p>As it's networked software it needs to also have a controllable way to deny extra requests (aka AdBlocker)</p>
  96. <p>Good examples: lynx, elinks</p>
  97. <p>Worst examples: Mozilla Firefox, Anything Blink-based</p>
  98. <h2>See Also</h2>
  99. <ul>
  100. <li><a href="/notes/phone-required-features">Phone Required Features</a></li>
  101. <li><a href="/decreases%20of%20usability">Decreases of usability</a></li>
  102. <li><a href="http://www.catb.org/esr/writings/taoup/">The Art of Unix Programming</a></li>
  103. </ul>
  104. </main>
  105. <!--#include file="/templates/en/footer.shtml" -->
  106. </body>
  107. </html>