diff --git a/feps/fep-f1d5.md b/feps/fep-f1d5.md new file mode 100644 index 0000000..c78ab49 --- /dev/null +++ b/feps/fep-f1d5.md @@ -0,0 +1,114 @@ +--- +authors: CJ +status: DRAFT +dateReceived: 2020-12-11 +--- +# FEP-f1d5: NodeInfo in Fediverse Software + +## Summary + +NodeInfo is a protocol intended to standardize upon a way to provide +server-level metadata to the public. This enables tools and clients to utilize +this metadata to assess server health or facilitate end-users choices about +servers and software to use on the Fediverse. + +## History + +NodeInfo was developed prior to the ActivityPub protocol targeted for use by +diaspora, friendica, and redmatrix software [ActivityPub]. Some of the original +protocols it encapsulated include diaspora, pumpio, and gnusocial. + +The NodeInfo specification is incredibly strict in its schema, often requiring +regex-validation and a closed set of enumerated possible values. As an objection +to this, the NodeInfo2 fork was created as a form of criticism by removing some +validation of views and with some logical restructuring of the metadata +[ServiceInfo]. Building off of NodeInfo and NodeInfo2, ServiceInfo was briefly +explored [ServiceInfoRepository]. + +This FEP does **not** attempt to document the specific protocol details. For +that, see the [NodeInfoRepository] and [NodeInfo2Repository]. It attempts to +clarify the history and identify shortcomings with the current approaches, to +bring context to developers of Fediverse Software. + +## Requirements + +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", +"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this specification are to +be interpreted as described in [RFC-2119]. + +Fediverse software SHOULD implement NodeInfo [NodeInfoRepository]. + +## Caveats + +At the time of this FEP's writing, the current objections to the current state +of NodeInfo that have been identified by the community are: + +* The `software.name` regex is unnecessarily strict. For example, no uppercase + letters, no spaces, no non-English-alphabet, and no special characters besides + hyphen are permitted. +* The `inbound` and `outbound` elements are specified as a closed set of enums + instead of a simple string. Protocol versioning manifests as renaming, having + to add a new enum, which results in unclear version management. +* The Fediverse software MUST have an `openRegistrations` concept due to it + being required. +* Lacks an extendable method for identifying and versioning other features, such + as HTTP Signatures, webfinger, or OAuth. Whereas the specification is very + strict, the `metadata` is too lax. +* The `users.usage` is not denormalized, such that implementations can provide + custom pairs of (activity counts, time period in days) that make sense for the + software. +* The `activeHalfyear` and `activeMonth` are ill-named properties for describing + the time periods of 180 days and 30 days, respectively. A "half of one year" + is roughly 182.5 days, 75% of the time. A month is 30 days, 33% of the time. +* The `localPosts` and `localComments` are not denormalized into pairs of + `(kind, counts)` for software that, for example, hosts audio files, hosts + videos, or software that does not have comments, or does not have posts. +* The `localPosts` and `localComments` are required, which is problematic for + software that does not have comments, or does not have posts. + +## Implementations + +### Servers + +* Mastodon +* Matrix +* Pleroma +* PeerTube +* WriteFreely +* Friendica +* Diaspora +* PixelFed +* Misskey +* Funkwhale +* Plume +* GNU Social +* lemmy +* zap +* Socialhome +* epicyon +* apcore + +... just to name a few. + +### Clients + +* [The-Federation.Info](https://the-federation.info/) +* [Pod Uptime](https://podupti.me/) +* [Hello Matrix Public Servers](https://www.hello-matrix.net/public_servers.php) + +## References + +- [ActivityPub] Christopher Lemmer Webber, Jessica Tallon, [ActivityPub](https://www.w3.org/TR/activitypub/), 2018 +- [NodeInfoRepository] Jonne Haß, [jhass/nodeinfo](https://github.com/jhass/nodeinfo), 2014 +- [NodeInfo2Repository] Jason Robinson, [jaywink/nodeinfo2](https://github.com/jaywink/nodeinfo2), 2016 +- [ServiceInfo] Jason Robinson, [ServiceInfo - specification for service metadata](https://talk.feneas.org/t/serviceinfo-specification-for-service-metadata/99), 2019 +- [ServiceInfoRepository] Jason Robinson, [feneas/serviceinfo](https://git.feneas.org/feneas/serviceinfo), 2019 +- [RFC-2119] S. Bradner, [Key words for use in RFCs to Indicate Requirement Levels](https://tools.ietf.org/html/rfc2119.html + +## Copyright + +CC0 1.0 Universal (CC0 1.0) Public Domain Dedication + +To the extent possible under law, the authors of this Fediverse Enhancement +Proposal have waived all copyright and related or neighboring rights to this +work.