Internally, Mozilla Firefox has functions and interfaces that vary across platforms and from version to version. By enumerating these differences and testing for their existence, it is possible to detect platform and version without relying on the userAgent string.