This paper presents a comparison of certain direct algorithms for computing the Moore-Penrose inverse, for matrices of full column rank, from the point of view of numerical stability. It is proved that the algorithm using Householder QR decomposition, implemented in floating point arithmetic, is forward stable but only conditionally mixed forward-backward stable. A similar result holds also for the Classical Gram-Schmidt algorithm with reorthogonalization (CGS2). This algorithm was developed and analyzed by Abdelmalek (BIT, 11(4):354–367, 1971) and its detailed error analysis was given in Giraud et al. (Numer. Math. 101(1):87–100, 2005). We incorporate the recent result of Byers and Xu (SIAM J. Matrix Anal. Appl. 30:822–843, 2008) to show that the algorithm based on the Golub-Kahan bidiagonalization is mixed forward-backward stable under natural assumptions.