— In this paper, we study the link layer scheduling problem in wireless ad hoc networks. In such a network, the communication links compete for the scarce and time-varying wireless channels. Recently, opportunistic scheduling that exploits variation of channel conditions at each link has drawn great attention to improve system performance. Taking advantage of the multiuser diversity and being aware of the potential contention among neighboring transmissions, we formulate the opportunistic scheduling problems with QoS requirements and present the optimal scheduling policies for both single- and multihop ad hoc networks. We also proposed COS, a distributed Cooperative and Opportunistic Scheduling algorithm, which realizes the optimal scheduling policies by introducing the cooperation among neighboring transmitters. Simulation results indicate that our implementation achieves higher network throughput and provides better QoS support than existing solutions.