The rest is just me rambling about stuff I thought up at YAPC. Stem vs POE: WIN-WIN! Stem == POE + IKC + COOLSTUFF - OTHERCOOLSTUFF Terminology : Stem | POE =============+======== Hub | Kernel Cell | Session Message | Event/State/Message/Mumble built-in | IKC Portal | IKC::Responder Uri: Stem has 0 security on purpose, because it expects you to know what you are doing (ie ssh tunnels). Leolo: IKC has a little (unpublished events aren't remotely postable) and I hand wave a lot figuring that you could layer it on top. somehow. Sungo: Which is a cool way of enforcing encapsulation Leolo: thank you -also- Uri is typical application (sysadmin or custom software) is very different from Leolo's (e-commerce) so the assumption that "anything that got into Stem has to be trusted" isn't valid. Both Stem and IKC use stateless protocols... Schuyler pointed out that putting authentication and authorization on top of stateless protocols is a pain. COOLSTUFF: Stem environment and configuration stuff: allows you to configure all your Cells and Hubs from command-line, config files or "on the fly". Go look at conf/chat.stem in the distro (www.stemsystems.com) to see what this is. Stem::TTYMsg allows you to post messages to cells from a TTY "console". Also, you can modify the Stem environment, hence Cells themselves. (Uri doesn't see why I like TTYMsg so much :) (insert other stuff here as I explore stem) Stem doesn't have call() nor yield(). OTHERCOOLSTUFF: POE has more protocols already implemented: HTTP, IRC, FTP... POE has, currently, more users NT support !SO! POE must ste^Wlearn as many ideas from Stem as possible. POE and Stem must interoperate as seamlessly and efficiently as possible. !AND! we all win. For interoperation, we have to also think of event routing and "addressing" aka naming. POE has a standard way: $session=>$event, the IKC way: poe://kernel/session/event (pseudo encapsulated in IKC::Specifier) and the vapourous POE::Event POE doesn't do much routing yet. IKC allows you to put a * in there kernel for multicasting, but I don't know if this works :) Stem has a string way: "cell:event" and a hashref {to=>"cell:event", to_hub=>$hub, from=>$me, reply=>$george} Stem handles routing in the Portal and imitates IP (sort of). Ie : if i know the Hub, I send to it. If I don't, send to a DEFAULT. No multicasting, but it's easy to do that in other ways. URIs: poe://kernel/session/event poe://*/session/event (multicast) poe:session/event (current kernel) stem://hub/cell/message stem://DEFAULT/cell/message Or e-mail: event@session.kernel event@session (local kernel) message@cell.hub message@cell (local hub, or DEFAULT if cell isn't in local hub) It would be cool if we could have a system that would allow Leolo to say "bang path" all the time :) kernel1!kernel2!Hub1!Cell!Message Note that in all these cases, global names can't have spaces! Also, IKC's subscription thing sorta subsumes DEFAULT. Uri probably doesn't like this way of doing things though. Frame this as a push vs pull or early vs late binding debate.