zhongwencool/maxwell

Let's talk

Closed this issue · 10 comments

Hi zhongwencool, I'm Tymon - the author of tesla library.
I've discovered your project just today, after reading a related blog post

First of all, I can't help but mention that maxwell is kind of a rip-off of tesla's codebase, not only in terms of concept or API
but also the core builder itself. But let's leave that.

The really important topic here is what this situation tells about the elixir community.
I was going to write about how tesla failed to satisfy the needs it promised and that I have failed to put more work into it.
But that's exactly the opposite to how I feel. We have never had a conversation about the shape of my project, its features or future.
The truth is you have not even tried to improve the existing project, but went straight ahead into creating your own.
There is obviously nothing wrong with creating your own project, except for the times when the output is mostly the same as already existing one.
Especially when there is nothing that prevents adding the features one needs into the original.

And that's why we can't have nice things. I really wish you'd put all this time into improving tesla or forking it into a separate project but with clear distinction from the original.

I really do not want the elixir ecosystem to become like node's with tens packages doing the exactly same thing.
In a free market the competition is a good thing, but it does not apply to open source.
Nobody benefits from fragmented community.

Having said all that, I do admit there are some interesting parts not present in tesla.

I'd also like to get to know your reasoning and motives behind deciding to create a separate project.

Let's talk.

Tesla is great!
I used Tesla for very long time.
I find some small bug when using Tesla, so I send a PR.
elixir-tesla/tesla#15
But maybe your are too busy to be able to see the code.
So I build Maxwell for learning elixir(the core builder code is from Tesla and Plug) .

If your have time to review PR on github, I can move maxwell's feature to tesla by sending PR step by step.
On the same time, I would like recommend Tesla on Maxwell's readme.md
and stop update Maxwell.

March was tough, sorry for missing that PR.

Since August I've been working with Elixir full-time. I am also using tesla on a daily basis in production systems, so there is definitely more activity now than half year ago.

I will definitely review and merge PRs (the smaller the better) if you are willing to do so. Most features should be straightforward to port.

Thanks :)

f7ff063
Let's make tesla better. :)

@teamon Glad to see you will make the tesla active again. I shifted from tesla to maxwell several months ago. From my point of view, for now, the maxwell surpasses tesla in various aspects, and till be the better choice.

  • the code quality of maxwell is better than tesla. I noticed @zhongwencool made the maxwell reach coverage 100% several days ago
  • the adapters in maxwell is more robust than tesla. tesla wrappers the clients without exposing all its functionality to the user, I cannot even pass options to the client, which implies I cannot use a proxy.
  • maxwell did a better naming job. tesla is definitely born from the plug, using plug keyword, similar code for building middleware, but using plug to build the middleware can be misleading.
  • the file structure for maxwell is better. tesla tries to put too many things in the tesla.ex, which for me is a bad code taste.
  • maxwell provides better HTTP header support.

So before you consider tesla to be a better, or original one, and ask the users of maxwell to migrate to tesla, you should at least read through the code of maxwell, to draw out a blueprint for the tesla and catch up the functionality of maxwell timely.

@zhongwencool But I think it's too early to close maxwell, I think, at least, you should maintain the maxwell before the tesla can grow into a more full-fledged one, many features I'm using in maxwell, isn't available in tesla.

As for the open source things, or the elixir ecosystem, the better one wins out, will always be the better result.

@secretworry sorry for deciding to close maxwell without asking your opinion.
@teamon I check tesla‘s code, I'm not used to the code style of tesla.
I'm sure your will not used to maxwell's code style as well..

I should not close maxwell right now, maybe there is a better solution.

@zhongwencool what's the final decision on this? I am thinking of ditching something similar that I am trying to build in support of this.

@teamon @imranismail After comparing the difference between tesla and maxwell's code and a detailed discussion with @secretworry and other maxwell's user.
I decided to maintain this project as before.
I think monopoly is always bad, the competition in open source is also a good thing, let user to choose.

I would like to chime in here as a long-time member of the community, and someone who would be interested in both tesla and maxwell (I've been working with tesla recently, but am considering using maxwell instead for relatively insignificant reasons).

@zhongwencool @teamon I think both projects are great, and I think they fill in an important gap in the community. That said, I think it's frankly a bit ridiculous to have two projects which are so similar dividing up not only the community, but also the maintenance effort the community can provide towards a shared package. I know both of you have users which are happy (and those who perhaps are not), but I can assure you that if you merged your projects, everyone would follow along. The existing code isn't going anywhere, so users who absolutely don't want to migrate after a merge are by no means required to do so.

I would gladly contribute code to the combined project, but from my perspective, there is little benefit to me contributing to either project, because they are too similar - if one becomes more useful than the other, I'll end up jumping ship, and my work put in to the other is wasted to some degree.

Competition is great, but I think it's important to remember that with software, a relative monopoly is not always a bad thing. Consider, there is a vast list of packages built around plug, ecto, and phoenix, just to name the big ones - there are still alternatives to each of them, but the community in general has chosen to focus their efforts on improving those core packages so that the community as a whole benefits, and the growth of Elixir is in great part due to the fact that these packages represent an effective monopoly on their respective concerns. We all want an HTTP client which is a reliable, well-maintained, extendable package with community support - after all, that's why we're here. Both tesla and maxwell have the potential to be that, but by competing against one another instead of working together, I think you are going to lose more than you gain from such competition.

It's of course up to you two what you choose to do, and I can't fault you for your decision - after all, you guys have put in the work, you don't owe anyone anything! I just hope that merging your efforts into a shared one is something you both are interested in doing, because I think everyone will benefit in the end :)

@bitwalker your points are concrete, but the decision is touch, for both sides.
Since both of them are just trying to fit their role as a thin HTTP adapter, most aspects of them are very similar. So it's hard to draw a clear line between the two, or as the teamon put it, with a clear distinction from the each other. And that's the reason, why it would be even harder for just to tell any of their maintainers or users to give up what they are doing or using and shift to the other one. A vote will definitely solve the problem, procedurally, but that's not only impossible but the proper way of solving it fundamentally.( I would vote for maxwell for simply the better code coverage, and the clearer code, but others may have their own reasons to support tesla)
Picking a proper package could be a pain for most NodeJS user, but the worse thing would be that a promising project degenerates due to the lacking of active maintenance. We do see most competitions finished simply by time, or by the inactive maintainers behind them.
But I thingk the good thing is both of them are in their before-becoming-a-big-one stage, and the best move for them is to keep evolving and updating, to provider more appropriate functionalities, and to attract more users, then finally the better one would grow into a real big one, and then worth accumulating more efforts from other maintainers. Besides, I think the maxwell has laid a relatively better foundation.

I agree with @bitwalker and @secretworry.
My thoughts:
Two projects are now missing some of features from the other.
But move maxwell's feature to tesla is more difficult than move tesla's feature to maxwell.
My solution:
I respect tesla's creater and user, and do not want tesla to give up directly.
I think the best solution in my side is:
Try to iterate maxwell's version, to meet the needs of users, and then attract more users.

So what's your thought @teamon ?