# Service


`define { name; description?; package; capabilities; protocols?; config?; }`
builds a typed `ServiceSpec` and attaches an `operations` field
holding the runtime-op program that materializes the service:

```
declareCapability(c1) … declareCapability(cN)   # one per category
declareProtocol(p1)   … declareProtocol(pM)     # one per protocol
declareService(svc)
materializeUnit(svc.name)
```

The eager compatibility check fires inside the underlying
`mb.operations.service` smart constructor — invalid services
cannot be constructed. `compatibility` and `descriptor` are
re-exported from `mb.descriptions.runtime` for consumer convenience.

`program` is a shortcut: pass either a service value or the
arguments to `define`, and receive an internalized builder program.

