ws4py is eager for a new maintainer

Years ago, I got really interested in the WebSocket protocol that eventually landed as RFC 6455. It was the first time I would spend so much time trying to participate elaborating a protocol. Obviously, my role was totally minor but the whole experience was both frustrating and exhilarating at the same time.

I thought the protocol was small enough that it would be a good scope for a Python project: ws4py. Aside from implementing the core protocol, what I was interested in wa two folds. First, relying on Python generators all the way down as a control flow mechanism. Second, I wanted to decouple the socket layer from the interface so I could more easily write tests through fake WebSocket objects. Indeed, as any network protocol, the devil is in the details and WebSocket is no different. There are a few corner cases that would have been hard to test with a socket but were trivial with an interface.

Did I succeed? Partly. In insight, my design was not perfect and I made a couple of mistakes:

  • I relied too much on an OOP design for high-level interface. Quickly I realised I could, and should, have used a more functional approach. After all, WebSockets are merely event handlers and a functional approach would have made more sense. With that said, Python is not a functional language, it has a few features but the ecosystem is not entirely driven that way so, at the time, that might have made the library adoption more difficult.
  • I sort of wrote my internal event loop abstraction on top of select, epoll… One goal I had set to myself is not to rely on any external dependency for the library. At least, I wanted to make sure the library could be used as-is for quick and dirty tests. That’s a bad idea for things as complex as proper event looping. Eventually, I provided support for gevent and asyncio (called tulip back then) though. Still, there is a chunk of the code that could be made simpler and more robust if we changed that.
  • Though I did decouple the socket from the interface and provided a nicer way of testing the protocol, the socket interface still leaks here and there making the code not as tight as it could be.

I’ve started that project years ago and I haven’t really paid attention to it for the last two years. Some folks, using the library, have been getting restless and no doubt frustrated by my lack of commitment to it. I want to be honest, I’ve lost interest in that project, I’ve moved to other puzzles that have picked my brain and I don’t have the energy for ws4py any longer.

Is the project still relevant anyway? Well, GitHub tells me it is starred by almost 800 individuals. That’s not massive but it’s decent for sure, the highest rank for any my projects. Also, it’s the only websocket library that runs with CherryPy.

Is WebSocket relevant still? That’s not for me to say. Some people claim it’s dying a slow death due to HTTP/2. Honestly, I have no idea. WebSocket, much like the Atom Publishing Protocol (another protocol I cared for), didn’t do as well as their authors may have expected initially.

Anyhow, I think I should be passing the relay to someone else who is motivated to take the project on. I’m not sure how this will happen but I would like to think we can be as transparent as we can about this. Please use the comments below or the mailing-list to discuss your interest.

If by the end of February, no one has showed any interest, I will deprecate the project officially so people can gradually move on. The project will stay on GitHub but it’ll be clear that no further changes or releases will be done.

It’s sad to let go a project you cared for but it’s only fair to the community to be transparent when you’ve lost the energy for it. Long live ws4py!

7 thoughts on “ws4py is eager for a new maintainer”

  1. I’m not aware of any major HTTP server that works as a reverse proxy for HTTP/2 apps so I can’t see how HTTP/2 would be replacing websocket any time soon.

  2. Same, i don’t see how HTTP/2 can superseded Websocket. I just started 1 month ago to move back my software architecture on cherrypy+websocket, after a long research, that was the easiest to get running on Android. Any other options require compilation (gevent, etc).

    I don’t want to see this project as deprecated, so i’m willing to help. Maintaining as the “main one”, i will not have time for that, but can help to address issues and create a bigger community about it.

    Thanks for all the work you did.

  3. I would love to help keep this alive. Realistically, I’m not sure how much I could bring to the table based off of my current skills… But I’m willing to learn more about this project and the things I can do to help it continue living.

  4. Thank you all for your kind comments and offer. Unfortunately, a temporary maintainer isn’t what I’m looking for at the moment. I cannot spend more time on ws4py and that means a team should really take over if they wish to see this project continue its life.

    With that being said, the project will not disappear from the Internet and if PR’s are provided that are useful to everyone, there might be something that could be done with new allowed comitters.

    1. That’s kind of you to say.

      Right now, the project is just stalled. No one is working on it actively and it’ll probably remain that way unless a concrete effort is made by a few individuals to carry on.

Leave a Reply to Roberto Alsina Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.