NDC is a proprietary protocol created by NCR (atm vendor). So to talk to an atm that uses NDC, you would send messages and receive messages based on the NDC specification.
Specifications are not open source, you get them from your atm owner.
ATM vendors use their proprietary protocols on their atms.
Diebold and NCR used to be the 2 main atm vendors and had their 91x and NDC protocols respectively.
ATM vendors try to emulate these old protocols so it's easier to integrate a hybrid fleet of atms with one atm driver instead of writing drivers for different protocols.
ATMs come preloaded with the OS and firmware/software and you have to either write your application to drive these atms using their protocol or buy software that will enable you to drive these atms for you. Usually it's messages over tcp. Atm sends you a request you understand it and send a response to it to say dispense cash, print receipts, take them to different screens etc.
Usually people don't write software that sits inside the atm, it's a Blackbox, that you interact with using the messaging protocol.
Implementation of the protocol can be done on a stack of your choice.
-chhil