After reading about voom, limma and GLM, I highly get confused about link functions and voom. The log transformation of counts in limma-voom, is the logarithm serve as a link function in the GLM formalism or is it merely a scale transformation? What is the most important reason for doing it, what is wrong with modeling variance in the cpm scale rather than log cpm?
Log-counts can be modelled well with a normal distribution, as described in the voom paper. The limma package does linear modelling, which requires normally-distributed values. So, you need to log-transform counts before you can run the linear modelling machinery in limma (plus the voom weights, to account for the precision of the counts). The counts themselves are definitely non-normal, so trying to fit a linear model to them (or CPMs) would be inappropriate.
The log-transformation does double duty in some respects. It makes the variance more stable with respect to changes in the count size, which simplifies the process of linear modelling. The transformation also associates linear changes in the coefficients with log-fold changes in the counts, which is useful for parametrizing the design matrix and giving biological interpretations to the coefficients.
These two aspects are separated in GLMs. The mean-variance relationship is governed by the choice of distribution for the random component, and the association between coefficients and the fitted value is determined by the link function. This gives more flexibility for modelling, compared to trying to find a transformation that can do both things at once. Of course, GLMs are irrelevant to limma, which deals strictly with linear modelling.