Gemini (protocol)

The Gemini protocol is an application layer protocol for distributed hypertext information systems that provides access to simple, primarily textual documents in Gemini space. This is done with contemporary technologies such as TLS, thereby improving privacy and user agency relative to the Web. The protocol is being designed collaboratively and is not currently being standardized as an internet standard.

The design is inspired by the Gopher protocol, but mandates the use of Transport Layer Security with trust on first use (TOFU)[1] and privacy-related features. It is not intended to replace Gopher or HTTP, but to co-exist with them.[2][3]

Gemini is designed within the framework of the Internet protocol suite. Like HTTP(S), Gemini functions as a request–response protocol in the client–server computing model. A Gemini browser (like an HTTP web browser), for example, may be the client and an application running on a computer hosting a Gemini site may be the server. The client submits a Gemini request message to the server.

Gemini resources are identified and located on the network by Uniform Resource Locators (URLs), using the URI scheme gemini:// which is analogous to https for the HTTPS web. There exists no insecure analog within Gemini to the original http scheme. As with HTTP hypertext, URIs are encoded as hyperlinks in gem-text documents, so as to form interlinked hypertext documents in the Gemini "web", which users refer to as Gemini space.[4]

Much like the original HTTP 0.9 specification, a Gemini request is only a URL, and the current draft specifications call for this request format to not be extensible, in order to preserve one of the project's stated goals of simplicity, and to thus differentiate the forward path for Gemini vs HTTP. In a conscious design choice analogous to the original HTTP/0.9, Gemini uses a separate connection to the same server for every resource request. This design, for simplicity and user control, does not allow for more data to be requested or supplied by the server without further explicit requests from the client. Although the cost of this may be more latency in the establishment of TCP connections, the intent of Gemini is to provide a web of simpler documents (e.g. in regards to embedded images), which should load quickly over modern networks.

Example session

Gemini protocol transactions consist in a single request-response pair, with the server closing the connection on completion; a successful response includes the MIME type of the object requested but no other metadata, and is terminated by the server closing the TLS session (and underlying TCP connection). Lines in both request and responses are terminated with CRLF (carriage return + line feed).

C: gemini://example.com/
S: 20 text/gemini
S: # Example Title
S:
S: Welcome to my Gemini capsule. [etc]

Software

Various server implementations exist, lists thereof are maintained online.[5][6][7]

Due to the simplicity of the protocol and served media type, various Gemini browsers were implemented.[2][8] The following non-exhaustive list of clients highlights their diversity. Further lists are available online:[9][10]

Name Platform Technology
Amfora Terminal (TUI) Go
asuka Terminal (TUI) Rust, NCurses
AV-98 Terminal (CLI) Python
Bollux Terminal bash
Bombadillo Terminal Go
Castor GUI (GTK) Rust, GTK
Deedum GUI (Android) Dart
Elpher GUI (Emacs) Emacs
Fafi GUI Racket
GemiNaut GUI (Windows) C# for Microsoft Windows
gmni Terminal (CLI) C
Kristall GUI (Qt) C++, Qt
Lagrange GUI C, SDL
Ariane App (Android) Kotlin
deedum App (Android, …) Flutter
gemini-ios App (iOS) Swift
Rocketeer App (iOS, MacOS)Testflight[11] Swift

See also

References

  1. ew0k (2020-12-06). gemini://tilde.team/~ew0k/posts/certificate-security.gmi. Retrieved 2020-12-08. "Most gemini browsers will make a fair attempt at validating the certificate: first check if the Common Name or Subject Alternative Names match the requested hostname, then check the not-valid-before and not-valid-after dates, then check if we've visited this host before and if the cert provided now matches the cert provided last time."
  2. "Project Gemini FAQ". Archived from the original on 22 June 2020. Retrieved 26 June 2020.
  3. Kaiser, Cameron (November 5, 2020). "A Gopher view of Gemini". Old Vintage Computing Research. Retrieved November 13, 2020.
  4. "Lagrange". Retrieved November 15, 2020.
  5. gemini://gemini.circumlunar.space/software
  6. "Servers".
  7. "kr1sp1n/awesome-gemini". December 19, 2020 via GitHub.
  8. Kenlon, Seth (October 6, 2020). "Simplify your web experience with this internet protocol alternative". Opensource.com. Retrieved November 10, 2020.
  9. gemini://kwiecien.us/logarion/gemini-client-review.gmi
  10. gemini://gemini.ctrl-c.club/~sario528/
  11. https://shadowfacts.net/2020/ui-framework-dilemma/
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.