Fair resource allocation is a fundamental optimization problem with applications in operations research, networking, and economic and game theory. Research in these areas has led to the general acceptance of a class of $\alpha$-fair utility functions parameterized by $\alpha \in [0, \infty]$. We consider $\alpha$-fair packing—the problem of maximizing $\alpha$-fair utilities under positive linear constraints—and provide a simple first-order method for solving it with relative-error guarantees. The method has a significantly lower convergence time than the state of the art, and to analyze it, we leverage the approximate duality gap technique, which provides an intuitive interpretation of the convergence argument. Finally, we introduce a natural counterpart of $\alpha$-fairness for minimization problems and motivate its usage in the context of fair task allocation. This generalization yields $\alpha$-fair covering problems, for which we provide the first near-linear-time solvers with relative-error guarantees.