TinyOS uses nesC, a component-based programming language, to develop applications. nesC applications consist of modules that implement interfaces and configurations that wire components together. Components define specifications and implementations. Modules provide executable code while configurations wire components. Components use interfaces and tasks allow splitting long operations. Concurrency is managed through tasks and atomic blocks. State is shared through interfaces and generic modules or by-reference parameters.