ok, dat is inderdaad de formele definitie van een API. De rest van de wereld bedoelt gewoon dat stukje software, interface/class/methode/component/whatever waarop je op dat moment wil aansluiten. Formeel heb je dus gelijk dat ik niet gelijk heb

Echter wat is die JDK API dan? Bedoel je dan de Javadocs, of de specificaties (die bestaan nml slechts voor een subset van de gehele JDK).
Niet handig om door de sources van anderen te steppen? Pardon? Daar denken we dan echt verschillend over. En stable libs bestaan niet. Ik heb nog nooit een lib gebruikt die geheel zonder bugs was. Alleen afgelopen twee weken al heb ik twee bugs in de Eclipse java compiler gevonden bijv. En nog een aantal in Groovy. Daarom is het ook zo prettig om met open source projecten te werken, zodat je - als er wat aan de hand is - je kunt nagaan of het je eigen fout is of dat het aan een van je dependencies ligt.
Trouwens, waar ik de afgelopen jaren het meest van geleerd heb als programmeur is om eens even goed door de sources van een lib heen te gaan. De Eclipse API (issie weer) bijv.; daar zitten gave patterns in die ik verder nergens heb gezien. Of waar ik nu actief voor ben:
http://wicket.sourceforge.net. De initiator van dat project heeft zelf aan AWT en Swing meegewerkt, en dat is duidelijk te zien in de elegantie waarmee hij zaken oplost. Dit is bijvoorbeeld de eerste keer dat ik het Vistitor pattern mooi en praktisch zie toegepast. Daar krijg je zelf ook gewoon weer goeie ideeen van.
Vwbt het hercompileren van de java sources... Ik heb het momenteel niet klaarstaan, maar ik heb wel momenten gehad dat ik echt even door de JDK wilde steppen om helder te krijgen hoe bepaalde stukken werken. Bijv. JAAS. Dat werkt best ingewikkeld. Probleem is echter dat de JDK zonder debugging info is gecompileerd, waardoor een hoop variabele informatie etc niet beschikbaar is als je er doorheen stept. Als je dit toch wil doen kun je zelf de JDK hercompileren met debugging info aan. Niet dat je dat dagelijks wil doen... maar het kan.