FSDL and Open Services for Lifecycle Collaboration (OSLC)

OSLC Logo

This initiative defines a linked data platform for Application Lifecycle Management (ALM) and Product Lifecycle Management (PLM) as a set of open specifications in the OASIS open standards track.

Note: Not all here is directly applicable, yet OSLC seems to warrant further study.

Via a toot I found the Open Services for Lifecycle Collaboration (OSLC) initiative. From the value proposition here’s the use case for Tool Vendors:

As a tool vendor, you need to ensure that your customers can integrate your product with other tools in order to extract the most value from your product. While providing a REST API is a norm nowadays, a developer has to build an integration layer. As every REST API is different, it means extra time reading the documentation, extra time developing plumbing code to perform model transformation, and most importantly, all this needs to be done on a case basis, leading to point-to-point integrations.

OSLC allows you to provide:

  • a uniform self-descriptive REST API;
  • a linked data model based on standard domains, common in ALM/PLM (RM, QM, CCM, etc.), that you can tailor to your product;
  • exchange data in plain JSON with the clients that are not linked-data ready;
  • provide rich UIs from your tool for use in 3rd-party tools for seamless linked data workflow;
  • and many other features that your customers would appreciate.

The uptake of the interoperability standards are mostly in a market of Enterprise Tool Vendors, and used by large complex organization to integrate their toolstack.

But when considering “Federated Free Software Development” as Mission for The Forgers Guild along the scope of FSDL and in accordance to ForgeFed specification (cc: @fr33domlover) and also e.g. thinking of a “Software Forge” such as Forgejo (cc: @dachary) or “Design Platform” such as Solidground (cc: @aschrijver, @realaravinth), then it becomes clear there’s a lot of overlap.

Let’s look more closely at the current Specifications:

Specification Description
Core 3.0 OS Latest published revision of the OSLC 3 specification. OASIS Standard
Query 3.0 OS Defines a simple, implementation independent selection and projection query capability. OASIS Standard
Quality Management 2.1 OS Defines the OSLC services and vocabulary for the Quality Management domain.
Requirements Management 2.1 OS Defines the OSLC services and vocabulary for the Requirements Management domain. OASIS Standard
Change Management 3.0 OS Defines the OSLC services and vocabulary for the Change Management domain. OASIS Standard
Tracked Resource Set 3.0 PS01 Allows servers to expose a set of resources whose state can be tracked by clients.
Architecture Management 3.0 OS Defines the OSLC services and vocabulary for the Architecture Management domain.
Configuration Management 1.0 PS 01 OSLC Configuration Management defines an RDF vocabulary and a set of REST APIs for managing versions and configurations of linked data resources from multiple domains.
PROMCODE 1.0 OS PROject Management of COntracted DElivery approach based on OSLC. OASIS Standard

There are some nice aspects to how these standards are modeled. The Core specification defines resource descriptions, capability discovery, service definitions and service catalogs. There’s also a part the defines Delegated UI (so the source system that has best control of the data, controls the UI).

Then on top of the Core specs, domain-specific vocabulary extensions are defined. Via the core spec each of these domain vocabs can be further customized to describe services offered by specific tool implementations.

Some other highlights worth mentioning…

Change Management has a lot of overlap to PR/MR’s in code forges. Here’s the UML model:

Change Management model

The Tracked Resource Set specification primer has an example for modeling Patches (Turtle format):

@prefix trs: <http://open-services.net/ns/core/trs#>.
@prefix trspatch: <http://open-services.net/ns/core/trspatch#>.
<urn:example:6e8bc430:a.example.com:2014-04-28T17:39:32.000Z:102>
   a trs:Modification;
   trs:changed <https://a.example.com/container/a1>;
   trs:order "102"^^xsd:integer;
   trspatch:beforeEtag "15687ds9gha6s7";
   trspatch:afterEtag "285d4h2ffgddd9";
   trspatch:rdfPatch
     """
      D <https://a.example.com/container/a1> <http://www.w3.org/ns/ldp#member> <https://a.example.com/version/r/577> .
      A <https://a.example.com/container/a1> <http://www.w3.org/ns/ldp#member> <https://a.example.com/version/r/578> .
     """.