{"id":21690976,"url":"https://github.com/reiver/fist-protocol","last_synced_at":"2026-03-19T21:06:00.693Z","repository":{"id":148331249,"uuid":"493998173","full_name":"reiver/fist-protocol","owner":"reiver","description":"fist protocol — a finger inspired protocol","archived":false,"fork":false,"pushed_at":"2023-09-03T12:03:59.000Z","size":25,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-06-19T05:04:22.213Z","etag":null,"topics":["finger","finger-protocol","smallnet","smallweb","smolnet","smolweb"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/reiver.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-05-19T09:08:20.000Z","updated_at":"2024-10-03T23:48:38.000Z","dependencies_parsed_at":"2025-07-12T12:30:34.893Z","dependency_job_id":null,"html_url":"https://github.com/reiver/fist-protocol","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/reiver/fist-protocol","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reiver%2Ffist-protocol","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reiver%2Ffist-protocol/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reiver%2Ffist-protocol/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reiver%2Ffist-protocol/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/reiver","download_url":"https://codeload.github.com/reiver/fist-protocol/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reiver%2Ffist-protocol/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29006081,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-02T04:25:24.522Z","status":"ssl_error","status_checked_at":"2026-02-02T04:24:51.069Z","response_time":58,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["finger","finger-protocol","smallnet","smallweb","smolnet","smolweb"],"created_at":"2024-11-25T17:35:30.926Z","updated_at":"2026-02-02T05:05:37.174Z","avatar_url":"https://github.com/reiver.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Fist-Protocol\nby Charles Iliya Krempeaux\n\n## Name\n\nThe name of the **fist-protocol** is a play on the name for the **finger-protocol**.\nThis was done because the **fist-protocol** was directly inspired by the **finger-protocol**, and — although the **fist-protocol** does \u003cem\u003enot\u003c/em\u003e explicitly continue as a newer version of the **finger-protocol**, it is a successor \"\u003cem\u003ein spirit\u003c/em\u003e\" — i.e., a \"\u003cem\u003espiritual successor\u003c/em\u003e\".\n\n## Design\n\nThere are many things that went into the design of the **fist-protocol**.\n\n### Finger-Protocol Inspiration\n\nThe **fist-protocol** is inspired by the **finger-protocol** and the ways which **finger** was used people.\n\n**finger** is said to have be created back in 1971.\n\nI was using **finger** in the 1990s — and maintained my own **finger** (`.plan` and `.project`) files.\nBack then, my **finger** (`.plan`) file contained:\n* contact information,\n* URLs to my presence on other parts of the Internet,\n* a short biography,\n* a journal,\n* articles,\n* jokes,\n* a bunch of ASCII art.\n\nI stored all that information in separate files, which were compiled into a **finger** `.plan` file. \n\nBack then I (and I suspect most people) accessed **finger** from a terminal or terminal emulator, connected to a Unix system, by invoking command similar to:\n\n```\nfinger username\n```\n(Here `username` would be replaced by the person's username on that Unix system.\n\nSo, for example:\n\n```\nfinger joeblow\n```\nOr:\n\n```\nfinger dariush\n```\n\nExample output from the `finger` command might look something like this:\n\n```\nLogin: reiver                           Name: Charles Iliya Krempeaux\nDirectory: /home/reiver                Shell: /bin/bash\nLast login Thu Dec 01 02:05:59 2022 UTC\nNo Mail.\nPlan:\n\n\n          _\n         ( )\n          H\n          H\n         _H_\n      .-'-.-'-.\n     /         \\\n    |           |\n    |   .-------'._\n    |  / /  '.' '. \\\n    |  \\ \\ @   @ / /\n    |   '---------'\n    |    _______|\n    |  .'-+-+-+|\n    |  '.-+-+-+|         Hello world!\n    |    \"\"\"\"\"\" |\n    '-.__   __.-'\n         \"\"\"\n```\n\nSome **finger-protocol** clients would include the host-name in the output, too.\nFor example:\n\n```\n[example.com]\n\nLogin: reiver                           Name: Charles Iliya Krempeaux\nDirectory: /home/reiver                Shell: /bin/bash\nLast login Thu Dec 01 02:05:59 2022 UTC\nNo Mail.\nPlan:\n\n\n          _\n         ( )\n          H\n          H\n         _H_\n      .-'-.-'-.\n     /         \\\n    |           |\n    |   .-------'._\n    |  / /  '.' '. \\\n    |  \\ \\ @   @ / /\n    |   '---------'\n    |    _______|\n    |  .'-+-+-+|\n    |  '.-+-+-+|         Hello world!\n    |    \"\"\"\"\"\" |\n    '-.__   __.-'\n         \"\"\"\n```\n\n#### Finger-Protocol Advantages\n\nSome desirable qualities of the 1970s era **finger-protocol** are:\n\n* ✅ the **finger-protocol** is a **human-legible** protocol\n  * rather than just a _programmer-legible_ or _machine-legible_ protocol\n* ✅ the **finger-protocol** protocol is **simple enough** for even a more junior software developer to be able to understand it\n* ✅ the **finger-protocol** protocol and its default data-formats are **simple enough** for a competent software developer to be able to create a (simple) working **client** as a weekend project\n  * ✅ if the default data-format is dumped to a terminal or terminal emulator it is human-legible\n* ✅ the **finger-protocol** protocol is **simple enough** for a competent software developer to be able to create a (simple) working **server** as a weekend project\n* ✅ all of a (single) user's content is provided as a **single download**\n  * this is true even if the user has both a `.plan` file and a `.project` file; they are combined into a single download.\n* ✅ a client could make a request from a server for a user who is _not_ (necessarily) local to that server\n  * for example: `finger joeblow@example.com@host.example`\n* ✅ the **finger-protocol** implicitly has a key-value pair format that is **human-legible**, **programmer-legible**, and **machine-legible**.\n  * for the format resembles the INI-format including the (square) bracket section headers, but it uses a colon (\":\") for the key-value separator rather than an equal-sign (\"=\"), and there is a way of writing multi-line values.\n\n#### Finger-Protocol Disadvantages\n\nSome undesirable qualities of the 1970s era **finger-protocol** are:\n\n* ❌ when a client receives a response from a server, it does not know whether it received all the data or not, as, for example, the network connection could have been disconnected prematurely, but there is no way to detect this,\n* ❌ there is no _tamper detection_,\n* ❌ there is no way to determine whether the finger (`.plan`) file was actually from the user whose content was requested,\n* ❌ there is no privacy,\n* ❌ the entire finger (`.plan`) file must be download each time, even if the exact same finger (`.plan`) file was previously downloaded,\n* ❌ identity is strictly tied to an Internet domain,\n* ❌ there is no official way of segmenting the download (into sub-pages).\n\n### HTTP\n\nIn some ways, the **HTTP-protocol** has become a _de facto_ (**layer-4**) **transport-layer-protocol** (rather than a (**layer-2**) **application-layer-protocol**).\n\nThis seems to have initially been due to **firewalls** at many corporations.\n\n**IPv4 address exhaustion** probably also played a role in this, by pressuring corporations to use **private networks**. But, their use of **private networks** was often done through **firewalls**.\n\nAt many corporations, TCP-port 80 (for the HTTP-protocol) and later TCP-port 443 (for the (encrypted) HTTPS-protocol) were allowed through corporate **firewalls**, but little if any other TCP port was.\nWith all UDP-ports often being entirely banned.\n\nThat meant that, if you wanted to create a new application, and you wanted people to be able to use it while at corporate offices, then your application had to use TCP-port 80 and later TCP-port 443.\nI.e., it meant that your application had to use HTTP or HTTPS.\nI.e., it meant that your application had to be a Web-application.\n\nThat seems to have been the initial cause — that turned the **HTTP-protocol** into a _de facto_ (**layer-4**) **transport-layer-protocol** (rather than a (**layer-2**) **application-layer-protocol**).\nBut this isn't what kept it going.\n\nYears later, new developers never learned how to create network software (other than HTTP-protocol based software), and in some sense, the industry \"forgot\" how to create (non-HTTP) network software.\nOr, at least, by comparison, there weren't many of us who not only knew how to create network software, but had extensive experience doing it.\n\nAt first, both the front-end and back-end were built out of Web-technologies.\nBut, with the rise of the (so called) mobile-phone as the main computing-platform, and with it (due to \"pressure\" from Google and Apple Computers) and due to the popularity of creating \"native\" front-ends rather than Web front-ends — it is now usually just the back-end that could be considered _on the Web_ (with the front-end for the mobile-phone being something else).\n\nIt is somewhat interesting that — back the in 1990s, one of the things that drove the adoption of the Web to be the new ubiquitous front-end for \"everything\", was the pain of having to re-write your application mulitple times:\nfor Personal Computers (PCs) running Microsoft Windows,\nfor Macintosh computers (Macs) running Mac OS,\nfor Sun Microsystems computers running Solaris \u0026 NeWS,\nfor NeXT Computers running NeXTSTEP,\nfor SGI (Silicon Graphics Inc.) computers running IRIX,\netc.\nAnd now, with the whole Android versus iOS \"native\" applications, we are right back where we started — and have this same pain again of rewriting our applications for each platform!\n\nBut, either way, this is where we are, and both HTTP and TCP should be considered for a (**layer-4**) **transport-layer-protocol** for the **fist-protocol**.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freiver%2Ffist-protocol","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Freiver%2Ffist-protocol","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freiver%2Ffist-protocol/lists"}