Getting slightly serious for a moment… Given a language (in its most abstract and formal sense, a language is a set of strings [stirngs of what? Well, could be anything… for human language, speech sounds would be the basis, I suppose]), the “grammar” of that language is the set of rules for determining if a given string is or is not a member of the set. Linguisticians prefer to deduce these rules by observing what native speakers of the language consider to be correct use of said language. You can, however, codify and document the known rules: this is what grammarians do - with a greater or lesser degree of accuracy. (Panini’s original grammar of Sanskrit was pretty much founded on observation; on the other hand, as many have pointed out, there have been a lot of “grammars” of English that use prescriptive models based inappropriately on analogies with Latin.)
Languages change over time; however, at any given point in time, a language can be considered as having a set of rules, and you can use those rules to determine whether a given utterance is “grammatical”. Of course, no two people use language in exactly the same way - linguisticians refer to the “principle of mutual comprehensibility”, which basically means that, if two people can understand each other, they’re speaking the same language.
So… um. There was a point here, where did I put it? Oh, yes: language does have rules, but they’re founded on actual usage, not on prescriptive authority. And some variation is acceptable (more or less acceptable, depending on the social context of the utterance; for example, goat-felching references are inappropriate in legal writing). And language changes over time, so you never know; you might think someone’s making an error of grammar, but s/he may, in fact, be using the English of the future. (That’s my excuse, anyway…)