Consider self publishing specifications and dropping "draft" prefix #69
Replies: 5 comments 38 replies
-
It's my opinion that I don't think the goal of JSON Schema should be to get to a "done" state. I think in order to remain valuable and relevant it needs to keep evolving. And that's not really compatible with the IETF process. IETF is setup to form a working group to develop a standard and then disband when it's done. What we do is a "living standard" model that is more similar to what WHATWG and EcmaScript do except we call our releases "drafts" to confuse everyone. JSON Schema already operates as a self published standard, we just need people to recognize it as such. Of course the first thing we need to do is drop the "draft" terminology. I like "release" or "dialect" as an alternative, but I think we can drop the qualifier altogether as well. The other day I saw someone refer simply to JSON Schema 2020-12. I think that's good enough. Changing this terminology doesn't prevent us from continuing to maintain our spec with xml2rfc or publishing with IETF as personal drafts, but I think doing so sends mixed messages and we're better off decoupling our release process from IETF completely. The only thing we're missing is a path to officially registering |
Beta Was this translation helpful? Give feedback.
-
My opinion in slight contrast to @jdesrosiers: JSON Schema doesn't have to get to a "done" state, but it needs to get to a "stable" state, like an RFC. That is: New features can continue to evolve, but people implementing against that release should be guaranteed forward compatibility. In #119 I asked: Is there a way we can guarantee that older validators reading schemas with newer features don't report a false positive? I think if we can answer this, we can publish a stable RFC, and get our media type registration. |
Beta Was this translation helpful? Give feedback.
-
There doesn't seem to be a separate discussion for this yet, so I'll throw it out here -- after having read the media-type RFCs this weekend, I'm now wondering if a more appropriate name might be "application/json-schema+json" - the "json" part being the "structured syntax suffix", and the type itself being "json-schema", rather than "schema". (likewise, the name for the instance type should be "application/json-schema-instance+json".) ref https://www.rfc-editor.org/rfc/rfc6838#section-4.2 |
Beta Was this translation helpful? Give feedback.
-
Regarding self publishing, I had some thoughts I shared on an Issue regarding "living standards" and some things we should avoid. |
Beta Was this translation helpful? Give feedback.
-
As it stands, I'm opposed to dropping "draft", but we ought to be able to do in short order. I already wrote a short response above, but I want to elaborate a little bit, informed by the research I've been doing since then. What would a reasonable person familiar with standards processes believe the "draft" designation means? I would say "not stable": that there is no obligation for long-term support. And JSON Schema don’t have the interoperability guarantees that makes a stable specification. If implementations aren’t required to support schemas authored against the very previous draft that's only three years old, then it's not reasonable to call JSON Schema "stable". So I believe the “draft” designation is still appropriate. If I thought the spec was at a point where it could be standardized, I would have submitted a BOF a long time ago. Does this mean we have to be "done"? No. JSON Schema should have mechanisms that enable evolution. A spec can evolve and also be stable. For example, HTTP has been continuously worked on, but it's been "stable" ever since HTTP/1.0 — every implementation of HTTP since HTTP/1.0 supports HTTP/1.0. In contrast, HTTP/0.9 is "unstable" and not supported anymore. HTTP/2 is another good example. Many implementations are using $schema identifiers the same way HTTP/2 used ALPS identifiers when it was experimental (each draft was published with a different ALPS identifier, and required a different implementation). Obviously, Web browsers no longer carry around 20 different HTTP/2 engines. (To be clear, I object to this usage of $schema; it was intended to enable some amount of extensibility, but it's not a version identifier.) So, we won’t be out of “draft” status until we’ve figured out how to publish an "evolvable" specification. What does a "stable" and evolvable specification look like? At a minimum, a schema written for a stable draft should work in a validator written against a revision of that draft, guaranteed. What this means exactly depends on many details. If we only needed to support embedded usage in applications, then this would be easy. But if we also need to support usage in user-agents (APIs, Web browsers, etc.), then this is a little harder. So I'm collecting examples of use cases and requirements. If we agree that we should support a certain number of use cases and requirements, and if the spec supports all of those (including meeting the interoperability requirements), then a specification will be ready to publish. These "use cases & requirements" are somewhat popular in validation. Here's the use cases & requirements for SHACL, which validates graph data. Here's an example that covers just the case of "what if I need to deploy a change to an XML schema?" I've been talking about doing this for a little bit now. It turns out it's not as simple as listing a bunch of use cases; some use cases that appear different are actually the same thing, and there's different dimensions to categorize by (validation vs. annotation is one; embedded vs. ecosystem is another; you can go from "read annotations, completely self-contained in a single program" all the way to "validate arbitrary documents against untrusted schemas from a third party" and there's yet more dimensions relating to trust and evolution/versioning of schemas). And @handrews's work has many of useful parts to incorporate. This can inform work on developing "requirements", including interoperability requirements. I think once we can describe in technical terms what our interoperability requirements are, then the question of "what should the extension mechanism look like" will become obvious. |
Beta Was this translation helpful? Give feedback.
-
During our Open Community Working Meeting call on 2021-10-01 (#56), we discussed the posibility of self publishing the specifications as opposed to publishing through a standards body, and drop the "draft" prefix for our release version identifiers.
As noted in #56, this discussion was the result of the Open Discussion on the future of JSON Schema at the API Specifications Conference 2021, which was chaired by @jdesrosiers.
I had hoped to capture more of the discussion post session, but nothing as of yet (#59).
This also relates to Discussion #3 "Path to standardisation!".
Since the call, some internal discussion among the core contributors has taken place, and this should be captured here in perpetuity as Slack is ephemeral, and the discussion was private anyway.
My personal initial thoughts
Having reflected, one thing that immediately comes to mind is the logistics of new URI paths for meta schemas, publication documents (on the website), and tests.
Do we use a new path segment? “Release” or “version” or similar/different?
@karenetheridge suggested
release[-/]?YYYY-MM
which I also agree seems to make the most sense.I also think we should refer to releases as just "JSON Schema YYYY-MM".
Beta Was this translation helpful? Give feedback.
All reactions