         return if @isStarted()
         do @start
 
-    for portName, port of process.component.outPorts
-      continue if not port or typeof port is 'function' or not port.canAttach
+    for portName, port of outPorts
       targetPortName = @isExportedOutport port, name, portName
       continue if targetPortName is false
       @outPorts.add targetPortName, port

      @network.connect (err) =>
        return @error err if err
        notReady = false
        for name, process of @network.processes
          notReady = true unless @checkComponent name, process
        do @setToReady unless notReady
    , true

  start: ->
    unless @isReady()
      @on 'ready', =>
        do @start
      return

    return unless @network
    @started = true
    @network.start()

  checkComponent: (name, process) ->
    unless process.component.isReady()

      , 0

  findEdgePorts: (name, process) ->
    # FIXME: direct process.component.inPorts/outPorts access is only for legacy compat
    inPorts = process.component.inPorts.ports or process.component.inPorts
    outPorts = process.component.outPorts.ports or process.component.outPorts

    for portName, port of inPorts
      targetPortName = @isExportedInport port, name, portName
      continue if targetPortName is false
      @inPorts.add targetPortName, port
