gcc used to accept -fwritable-strings to allow for writable strings as mentioned in the sample. Generally only really, really old code needed this I believe gcc 4.x removed this feature. I think this was always an implementation defined feature, one where the spec is silent on how to treat these strings.
Most people these days will do something like the following to simulate:
char s = "hello world";
*s = 'H';
The assignment will work this way, since the string literal is copied to the stack.