I use "railroad" as a negative term. Though there are folks using the term to describe attributes I don't consider bad. I therefore, don't use the term to describe the postive aspects.
A game is bad when:
the DM actively and deliberately blocks and thwarts attempts to do reasonable things that have a reasonable chance of success.
The example of the party that avoids the hills in order to avoid the dragon they know about, and the GM makes every other direction impossible to pass is a good one.
This kind of problem happens not because the DM planned an encounter, but because the DM refused to adjust the plan after interacting with the players.
I call the above scenario "railroading", as in the act of.
1) The worst kind, is when the players are acting in good faith towards the completion of the adventure, and they are attempting a solution that is viable, and the GM won't accept any solution but the one that was created for the adventure. This is directly a GM mistake.
2) Another scenario of railroading is when the players deliberately try something to throw the game off. Trying to kill the duke in a scene where its "obvious" your supposed to talk to him and get clues. Naturally, the GM is going to try to block it, which technically creates the railroad scenario, though it was player induced. What causes a player to do this, is the real problem, solve this, and the GM won't knee-jerk a prevention railroad.
3) Another scenario of railroading is when the GM presents a plot-hook that the players (and possibly even the PCs) aren't interested in, and when the players try to dodge it, the GM finds a way to force them to do it. This type gets to be the most complicated. One the one hand, the GM failed to pick a hook that appealed to the players and/or PCs. On the other, it is justifiable that if you create a plot hook (i.e. a problem) and the PCs don't solve it, then the problem gets bigger, and this can APPEAR to be railroading, when it is simply the GM applying consequences for PCs actions (or inactions).
I argue that example #3 is manageable by solving the first two scenarios. As long as I'm not actively blocking reasonable PC actions, I'm allowed make the consequences for failing to chase a plot hook. It is rationally explainable and fair.
If orcs are massing for an attack on the town, as a player, I have a choice: this is all the GM has come up with, I either go for the hook, or he's going to wing it. As a PC, regardless of alignment, I either try to stop the attack, or the town in which I'm doing business will likely be gone next week (or I'll have to fight through a town invasion adventure). In either case, it's pretty stupid and disruptive to not bite the hook. Yes, I could wish the GM had written a session about finding loot and workign on my PC's quest to find who killed his dog, but fact is, the GM gets to initiate events in the world, and if you don't deal with them, the world will probably be changed in a way that isn't useful to the player or PC.
This is the point that players and GM's don't get. The GM can make anything he wants happen. He'll have happier players if he incorporates things the players want, but he has the right to make anything happen.
#1 really is the cardinal sin. It is the hammer that is used for all the higher level instances of "is this a railroad". Ultimately you are being railroaded because #1 is happening. #3 might seem like a railroad, but unless you really check to see if what the DM is doing is thwarting, or simply applying rational consequences, you don't know.
Thwarting reasonable player action is abuse of the GM's power of "make anything happen." Rather than abjudicating fairly, and adjusting the plan, the GM is trying to rigidly stick to the script. This actually defeats the point of GMing, which is to continuously adapt the script to what the players do. This adaptability occurs within combat encounters (GM's certain don't plan what squares the PCs and NPCs move into each round), it should occur outside the encounter as well.
It's not a crime (and not railroading) to move things around, as the game proceeds. It's efficient, and can be rationally explained in game. What is wrong is blocking legitimate and rational actions, solely to avoid changing the plan. As some general said, "no plan survives contact with the enemy."
#2 is harder to deal with. If the players aren't happy with the game, or they're simply disruptive, then expect to see #2 happen. Oddly enough, #2 can be a side effect of #3. It's all a matter of the players trying to disrupt the logical course of events.
The first solution is to make sure you have plots and scenes that make sense, and anticipate the most obvious things YOUR players and PCs will do. This means making plot hooks that involve the PCs and interest the players. It means leaving room in encounters for some solution type variety. If these steps don't work, look at the player. Are they disruptive for the sake of being disruptive? If yes, fix them or dump them.
In my own gaming group, we have a house rule of "always bite the hook." We trust our DM to make hooks that involve our character goals at times (and we tell him what we're looking to do next). But we also realize that the GM hasn't got time to write 20 plot hooks for us to peruse (and I wouldn't want to suffer the consequences of the 19 hooks we had to ignore). In exchange, the GM also understands that the "screw the players for picking the wrong hook" isn't fair game. We're expediting game initialization, in exchange for the trust that we're giving the GM. It works for us.