Linux supports the standard classes of devices introduced by UNIX. In addition, Linux allows new device classes to support new technology. Device classes are not rigid in nature—programmers may choose to create large, complex device drivers to perform multiple functions, but such programming is discouraged for two reasons: (1) code can be shared among Linux users and there is a wider demand for several simple drivers than for a single complex one, and (2) modular code is better able to support Linux’s goals of system scalability and extendibility. Therefore, programmers are urged to write device drivers that maximize the system’s ability to use the device effectively—no more, no less