IDE Library Manager - Handling of duplicate library names

Are duplicate library names forbidden or are these simply not handled well by the library manager ? Of course I know that there are also disadvantages when libraries have the same name but that is not the issue here.

Here is an example which I have traced back to: library-registry/repositories.txt at main · arduino/library-registry · GitHub

. . .
https://github.com/lacamera/ESPAsyncWebServer
. . . 
https://github.com/mathieucarbou/ESPAsyncWebServer
. . .

It looks like there are 2 competing claims for this library.
Only the first entry appears visible in the library manager (1.x and 2.x)
It may also be that the github entry of the second one is somehow malformed.

If it is so that duplicates are not supported, is there a mechanism in place to remove entries for abandoned libraries if someone appears to take active interest in maintaining a replacement ?

Attention: @mathieucarbou

I have already raised this issue to the Arduino Library team (but through another reason).

Sadly I cannot do anything.

lacamera's fork, besides being not correctly maintained, leaks in the registry, and lacamera also wrongly changed the attribution (didn't use the maintainer field as it should have been but changed the author field).

Ideally this is up to him to ask for a removal of his deployed libraries, but I will ask again.

I have opened this new issue. Feel free to vote for it and follow it :slight_smile:

OK. I see what has happened now. I saw from this: Add ArduinoJson 7 support by SBKila · Pull Request #1371 · me-no-dev/ESPAsyncWebServer · GitHub that you were actively maintaining this important library, for which there is proliferation of forks/renames, some only half maintained or completely abandoned, lying around.

Clearly you have got somewhere in that I guess you have had me-no-dev's permission to have changed this to point to your own repository. Can't you take it further and use the original name (yes, with spaces) that he used and get his library removed? This is if he accepts that it has been abandoned.

image

Looking at your exemplary work for the JSON library and corresponding documentation, I guess your involvement will be a big benefit.

I did just miss seeing some acknowledgement in your fork, that is without drilling through the fork history, of the not insignificant contribution of the original author me-no-dev.

No this is not an option: I've specifically changed from EPS Async WebServer (2.x) to EPSAsyncWebServer from v3.1.0 to comply with Arduino naming convention, which also makes the stack traces easier to follow, and also differentiate the lib name from the original one from me-no-dev. The reason is that even if he lacks time to maintain it and follow / merge PRs and maintain CI, he still added commits for Arduino 3 support and bumped version (Commits · me-no-dev/ESPAsyncWebServer · GitHub).

The problem is really the deployed fork from lacamera.

Sadly this is not how this work.

Unlike PlatformIO, which identifies a lib with author/libname, Arduino registry only identifies a lib with libname. And since attribution to author in theory should be kept (author property), and maintainer flag added (maintainer property), this leads to an overlap. This is an issue about how Arduino registry displays and handles dependencies sadly.

lacamera's fork changes both author (attribution - which is wrong) and name, so there is no overlap with me-no-dev.

  • lacamera deployed lib overlaps on deployed lib from https://github.com/mathieucarbou/ESPAsyncWebServer (which is a community maintained fork)
  • https://github.com/mathieucarbou/ESPAsyncWebServer deployed lib (previous ones) overlaps with me-no-dev ones

As me-no-dev pointed out in the pioarduino community effort to me and Jason here (Discord), he does not have any spare time to work on AsyncTCP or ESPSyncWebServer.

That is why we have forked it and are maintaining it with some folks. The idea being to add contributors to this fork who are willing to spend time in fixing bugs, improvements, maintenance, etc to remove any dependency over a one-man-made-project

The same thing happened to PsychicHttp by the way, a one person effort now moved into a more community fork with a Discord channel, and some contributors are added to the project.

I really don't understand what you mean. This is a fork, by definition, the work is attributed to the original authors and the many persons who contributed to it (look at the history). Attribution is done by leaving intact the author's name and adding ours as maintainers (you can have a look at the project descriptors).

I would understand your comment in the case of lacamera's fork though.

Well, I hope that this can be sorted out amicably (or otherwise). Certainly it would seem reasonable that easy access to a well maintained library should not be blocked in this way. But have I understood it correctly ? if the author name of the lacamera/ESPAsyncWebServer library had been left intact, you would have been able to use the name ESPAsyncWebServer for your library.

So until this is sorted out, one way or another, the only opportunity to use your version of the library is to download it directly from Github. But, anyway, that will not stop me from trying it. I currently use the me-no-dev version and want to try chunked send but some of the issue reports have put me off trying this out.

What I meant was something like this taken from a library which has had a long history, some of which may have started outside of Github, which could not be represented by the simple parametrisation in the Github repository. Arduino-IRremote/Contributors.md at master · Arduino-IRremote/Arduino-IRremote · GitHub
supplemented by in the main README.md :

image

But this is not something I want to spend too long discussing.

Oh yes that would be a very good idea to have that, and automated. There are so many people having contributed to the project over time! me-no-dev didn't have such contributor doc.

Please open a PR!
I will be very glad to review and merge!
Like I said, this is a community maintained fork so I really encourage you to participate and fill any gap you see :slight_smile:

I've just downloaded and tried version 3.3.4 of your GitHub - mathieucarbou/ESPAsyncWebServer: Asynchronous HTTP and WebSocket Server Library for ESP32, ESP8266 and RP2040 on an ESP32-S3. I went straight from the latest me-no-dev version.

I encountered only one breaking change AsyncWebParameter *p = request->getParam(i); where getParam() now returns a const and one deprecated method send_P() somewhere which I have to investigate. It also appears faster and I'm working with a static HTML file of about 13KB in PROGMEM with download times (including 750B JSON on a return trip) of about 500ms. Previously, it could have taken several few seconds. Also it became unstable if the HTML got much bigger forcing me to make horrible formatting changes like stripping out all leading spaces. I'll be looking at the chunked send next which, with the previous version, got bad reports.

So it looks very good from my point of view.

Yes we fixed some of the API signatures.
On ESP32, no need to use the _P methods (they were specifically made for ESP8266, but ESP32 could also use them), so we deprecated them in favor or others.
There are countless of bug fixes and improvements in this fork.