> Our roadmap for Net::LDAP 1.0 is to gain full *client* compliance with the most recent LDAP RFCs (4510–4519, plus portions of 4520–4532).
Aside from this statement found in the README, I haven't seen any recent discussion of a roadmap for the project.
I'd like to share what I think makes sense for the roadmap to kick off the discussion of whether we should have something formal, where it would live, who should maintain it and how, etc, if at all.
Referring back to the statement about 1.0 above, I fully support targeting compliance with the proposals. One example is filter handling; according to the spec, "(|(uid=one)(uid=two)(uid=three))" is valid, but `Net::LDAP::Filter` is hardcoded, not only for the out-of-date RFC 2254, but specifically for left/write pairs producing "(|(|(uid=one)(uid=two))(uid=three)" needlessly. This is not the only case, but it's one I've seen in the wild a number of times.
Code quality and style is all over the place. There's a lot of repeated stanzas (like the connection handling repeated for every operation) that could easily be refactored out. Many functions are huge and complex, poorly commented, black boxes which hampers troubleshooting and debugging, especially in production systems. Literals are littered throughout the library, masking intention/context where a constant would be more appropriate.
There are also some ways to encourage and improve performance, yet the library works against that. Timeouts could be added, and making `open { ... }` work consistently and make sense (there are rough edges there that I'm still uncovering).
The testing situation is a little haphazard. Modern CI environments can allow us to automate setting up, for instance, OpenLDAP to run tests against. While
https://github.com/github/github-ldap currently uses Ladle (
https://github.com/NUBIC/ladle) to boot an ApacheDS instance in-process to test with, I'm planning on replacing or pairing that with an OpenLDAP CI environment. And maybe Azure AD will make CI tests with ActiveDirectory a possibility as well (though I can't say).
I'd like to keep this library very practically focused and scoped. Following the spec will result in a more usable and portable library, while contradicting the spec is not an option (nor does it make any sense to deviate). Productive development, for experienced and new developers alike, should be the goal. We should be aiming to do just that, whether that's better documentation or tooling such as automated testing harnesses. We can explore ways to empower integrators better by answering the question "How are people abusing the library? What simple mistakes are they making? How can we help them learn and get better feedback, sooner?"