YA-LDAP (Yet Another LDAP) Server ?

I have met many people along the way who scoff writing an LDAP server implementation in Java. Some of the reasons are:

  • Java is slow! LDAP server needs to be fast. Java and LDAP don’t go together.
  • Have you ever heard OpenLDAP?
  • Who want to build infrastructure software, it’s boring.

    Their reasonings are valid, but myopic. I will expound this on a follow-up topic.

    ApacheDS Project has gone thru incubation process for 18 months and graduated only a few months ago (March 2005). It has been steadily gaining a community. You can take a peek at its chatter log. The project is led by a good friend of mine, Alex Karasulu, who is not only passionate but has a unique ability to bring together various passionate developers together. (Check out these testimonials)

    I lead an open source virtual directory project called Penrose which utilize Apache DS as its protocol layer (LDAP). Penrose leverages ApacheDS project for many reasons. Our goal was to add new functionalities to a plain ol’ LDAP server, namely virtualization, synchronization and federation (what Burton Group called “Identity Data Service“), and doing so without reinventing the wheel. Take a look at the following numbers:

    lines of code in ./apacheds/trunk = 84606
    lines of code in ./asn1/trunk = 30137
    lines of code in ./authx/trunk = 9553
    lines of code in ./clients/kerberos/trunk = 867
    lines of code in ./clients/ldap/trunk = 10420
    lines of code in ./naming/trunk = 17139
    lines of code in ./network/trunk = 20323
    lines of code in ./protocol-providers/changepw/trunk = 2842
    lines of code in ./protocol-providers/dhcp/trunk = 4858
    lines of code in ./protocol-providers/dns/trunk = 6825
    lines of code in ./protocol-providers/kerberos/trunk = 3772
    lines of code in ./protocol-providers/ldap/trunk = 2193
    lines of code in ./protocol-providers/ntp/trunk = 1598
    lines of code in ./sandbox/trunk = 31889
    lines of code in ./sandbox/trunk/apseda/trunk = 15176
    lines of code in ./sandbox/trunk/kerberos-sam/trunk = 1325
    lines of code in ./sandbox/trunk/osgi-spec/trunk = 5083
    lines of code in ./sandbox/trunk/protocol/trunk = 583
    lines of code in ./shared/kerberos/trunk = 13331
    lines of code in ./shared/ldap/trunk = 124599
    lines of code in ./shared/protocol/trunk =
    lines of code in ./standalone/trunk = 3161
    lines of code in ./testsuite/trunk = 3004
    Total: 393284

    85K in apacheds core (Server Code) + 125K in ldap-common (Shared Code) + 30K in ASN.1 (Shared Code) = 240K lines of code for LDAP ONLY!!

    It may not be anywhere close to 50M LOC, but maintaining and re-factoring a 250,000 LOC code is still a pretty challenging undertaking. Jboss codebase is about 500,000 LOC and requires more than 30 dedicated developers to maintain it. Penrose code is about 70,000 LOC. Had we chosen to implement our own LDAP server; we would be maintaining a total of 310K LOC ourselves.

  • 1 comment so far ↓

    #1 p-o-r-n-vid-eos here on 10.20.08 at 7:10 pm

    p-o-r-n-vid-eos here…

    p-o-r-n-vid-eos here …

    Leave a Comment