On the physical layer, a Linux machine must first recognize the hardware interface and load the appropriate software driver. A software driver provides a common interface for different NICs, which in return permits hardware independent utility software.