# Redfish OEM Resources

The Redfish specification allows for OEM resources and properties to be
implemented by OEMs. As a general rule, OpenBMC discourages the use of OEM
namespaces in APIs. In line with this, bmcweb does not expose an API for adding
OEM properties in a backward API compatible way for resources that have not been
merged to master.

## Why?

OEM properties in an open source project pose many problems when compared to
their closed source brethren in terms of reliability, code reuse, compatibility,
and maintenance.

1. As a general rule, OpenBMCs external Redfish API aims to be as compatible
   between systems as possible. Adding machine-specific resources, properties,
   and types largely defeats some of that goal, as clients must implement
   machine-specific APIs, some of which are likely to overlap, which increases
   the amount of code overall. OpenBMC also has very little visibility into
   clients that might interface with Redfish, and therefore needs to take care
   when adding new, non-standard APIs.

2. In practice, OEM resources trend toward a lower level of quality and testing
   than their spec-driven alternatives, given the lack of available systems to
   test on, and the limited audience of both producers and consumers. This poses
   a problem for maintenance in the long run, as it is very difficult to make a
   breaking change to an external API, given that clients are likely to be
   implemented in projects that OpenBMC isn't aware of.

3. If a given workflow eventually becomes standardized, OpenBMC OEM endpoints
   now have to break an API boundary to be able to move to the standard
   implementation. Given the amount of effort it takes to break an API, it is
   much simpler to wait for the standard to be completed before merging the OEM
   code to master.

4. DMTF has many more Redfish experts than OpenBMC. While the bmcweb maintainers
   do their best to stay current on the evolving Redfish ecosystem, we have
   significantly limited scope, knowledge, and influence over the standard when
   compared to the experts within DMTF. Getting a DMTF opinion almost always
   leads to positive API design changes up front, which increases the usefulness
   of the code we write within the industry.

## How?

If you've read the above, and still think an OEM property is warranted, please
take the following steps.

1. Present the new feature and use case to DMTF either through the
   [Redfish forum](https://www.redfishforum.com), or at a DMTF meeting. If
   possible, message the new feature through the normal openbmc communications
   channels to ensure OpenBMC is properly represented in the meeting/forum.
2. If DMTF is interested in the proposal, proceed using their documented process
   for change requests, and get your schema changes standardized; While OpenBMC
   does not merge new schemas that have not been ratified by DMTF, feel free to
   push them to gerrit. If the features are major enough to warrant it, feel
   free to discuss with maintainers about hosting a branch within gerrit while
   your DMTF proposal is in progress. If the DMTF feedback is documented as
   something to the effect of "this use case is unique to OpenBMC", proceed to
   write an OpenBMC design document about the new feature you intend to
   implement as OEM, under the OpenBMC (generic to all platforms) OEM namespace.
3. If OpenBMC feedback is that this feature is specific to a single OEM or ODM,
   and is unlikely to be used across platforms, then maintainers will provide
   you the option of adding your feature under an OEM/ODM specific namespace.

Regardless of the OEM namespace being used, implementations should plan to
implement all appropriate CSDL and OpenAPI schemas for their given OEM
resources, should pass the redfish service validator, and should follow redfish
API design practices. We require this same level of quality as non OEM to ensure
that OEM is truly required by the contributor to satisfy their use case. If OEM
were held to a lesser level of quality requirements, bwcweb would consist
entirely of OEM code.

bmcweb maintainers retain the final approval on OEM schemas.
