docs: def start_engine(self):
          '''
          Start the child processes (one per device OS)
          '''
          if self.disable_security is True:
              log.warning('***Not starting the authenticator process due to disable_security being set to True***')
          else:
              log.debug('Generating the private key')
              self.__priv_key = nacl.utils.random(nacl.secret.SecretBox.KEY_SIZE)
              log.debug('Generating the signing key')
              self.__signing_key = nacl.signing.SigningKey.generate()
              # start the keepalive thread for the auth sub-process
              self._processes.append(self._start_auth_proc())
          log.debug('Starting the internal proxy')
          proc = self._start_pub_px_proc()
          self._processes.append(proc)
          # publisher process start
          pub_id = 0
          for pub in self.publisher:
              publisher_type, publisher_opts = list(pub.items())[0]
              proc = self._start_pub_proc(publisher_type,
                                          publisher_opts,
                                          pub_id)
              self._processes.append(proc)
              pub_id += 1
          # device process start
          log.info('Starting child processes for each device type')
          started_os_proc = []
          for device_os, device_config in self.config_dict.items():
              if not self._whitelist_blacklist(device_os):
                  log.debug('Not starting process for %s (whitelist-blacklist logic)', device_os)
                  # Ignore devices that are not in the whitelist (if defined),
                  #   or those operating systems that are on the blacklist.
                  # This way we can prevent starting unwanted sub-processes.
                  continue
              log.debug('Will start %d worker process(es) for %s', self.device_worker_processes, device_os)
              for proc_index in range(self.device_worker_processes):
                  self._processes.append(self._start_dev_proc(device_os,
                                                              device_config))
              started_os_proc.append(device_os)
          # start the server process
          self._processes.append(self._start_srv_proc(started_os_proc))
          # start listener process
          for lst in self.listener:
              listener_type, listener_opts = list(lst.items())[0]
              proc = self._start_lst_proc(listener_type,
                                          listener_opts)
              self._processes.append(proc)
          thread = threading.Thread(target=self._check_children)
          thread.start()