code: def read(self, entity=None, attrs=None, ignore=None, params=None):
          
          # read() should not change the state of the object it's called on, but
          # super() alters the attributes of any entity passed in. Creating a new
          # object and passing it to super() lets this one avoid changing state.
          if entity is None:
              entity = type(self)(
                  self._server_config,
                  operatingsystem=self.operatingsystem,  # pylint:disable=E1101
              )
          if ignore is None:
              ignore = set()
          ignore.add('operatingsystem')
          return super(OperatingSystemParameter, self).read(
              entity,
              attrs,
              ignore,
              params
          )
docs: Provide a default value for ``entity``.
  
          By default, ``nailgun.entity_mixins.EntityReadMixin.read`` provides a
          default value for ``entity`` like so::
  
              entity = type(self)()
  
          However, :class:`OperatingSystemParameter` requires that an
          ``operatingsystem`` be provided, so this technique will not work. Do
          this instead::
  
              entity = type(self)(operatingsystem=self.operatingsystem.id)