We present a linear algorithm for self--calibration which, like the Sturm/Triggs method for projective reconstruction, is exact in the limit of small camera motions or sideways motions with rotations around the optical axis. Unlike previous algorithms, our approach recovers the available partial information about the internal parameters for ``critical'' motion sequences, where full recovery of the calibration is impossible. Also, we present a linear algorithm for estimating the camera motion and 3D structure given a projective reconstruction and known calibration, and we extend our linear approaches to more accurate, iterative algorithms. All our algorithms follow the stratified approach in which the Euclidean motion, 3D structure, and calibration are computed from a projective reconstruction.