docs: def main(is_server, discoveries, transports, http_port, other_arguments):
      """
      Runs the framework
  
      :param is_server: If True, starts the provider bundle,
                        else the consumer one
      :param discoveries: List of discovery protocols
      :param transports: List of RPC protocols
      :param http_port: Port of the HTTP server
      :param other_arguments: Other arguments
      """
      # Create the framework
      framework = pelix.framework.create_framework(
          (
              "pelix.ipopo.core",
              "pelix.ipopo.waiting",
              # Shell
              "pelix.shell.core",
              "pelix.shell.ipopo",
              "pelix.shell.console",
              # HTTP Service
              "pelix.http.basic",
              # Remote Services (core)
              "pelix.remote.dispatcher",
              "pelix.remote.registry",
          ),
          # Framework properties
          {pelix.constants.FRAMEWORK_UID: other_arguments.fw_uid},
      )
  
      # Start everything
      framework.start()
      context = framework.get_bundle_context()
  
      # Instantiate components
      # Get the iPOPO service
      with use_waiting_list(context) as ipopo:
          # Instantiate remote service components
          # ... HTTP server
          ipopo.add(
              "pelix.http.service.basic.factory",
              "http-server",
              {"pelix.http.address": "0.0.0.0", "pelix.http.port": http_port},
          )
  
          # ... servlet giving access to the registry
          ipopo.add(
              rs.FACTORY_REGISTRY_SERVLET, "pelix-remote-dispatcher-servlet"
          )
  
      # Prepare the utility object
      util = InstallUtils(context, other_arguments)
  
      # Install the discovery bundles
      for discovery in discoveries:
          getattr(util, "discovery_{0}".format(discovery))()
  
      # Install the transport bundles
      for transport in transports:
          getattr(util, "transport_{0}".format(transport))()
  
      # Start the service provider or consumer
      if is_server:
          # ... the provider
          context.install_bundle("remote.provider").start()
  
      else:
          # ... or the consumer
          context.install_bundle("remote.consumer").start()
  
      # Start the framework and wait for it to stop
      framework.wait_for_stop()