Gus Van Sant's long-in-development biopic of Harvey Milk, the slain San Francisco supervisor and gay civil rights activist, finally comes to the big screen as a somewhat buttoned-down, mainstream Hollywood movie, showing little of the experimental character of the director's last four features (possibly the most interesting second act in an American filmmaker's career).

Sean Penn is perfectly cast as Milk, for a number of reasons: physical resemblance, the right age, shared politics, a love for grandstanding... the actor even lives in San Francisco, for pete's sake. And as usual, he disappears into the role with great conviction. So is the movie around him any good? Well, I'm ambivalent about it.

For the most part, I really liked Milk. But a narrative framing device where, shortly before his murder, Milk tells his own story - and that of the 1970s' burgeoning gay rights movement in San Francisco's Castro district - is stiff and awkward. And it's hard to draw the line between the film's genuine sense of purpose (being Californian, I'm especially struck by the clear parallels between 1978's state proposition 6, which threatened to fire gay teachers from schools and which Milk fought so ferociously, and 2008's state proposition 8, which stripped gays of their newly-given right to marry; Milk was made even before that right was briefly granted, so its relevance is stunning) and its rather obvious statement-making: gays are people too. But then, that was Harvey Milk's own message, so it's pointless to say that Milk drives the point home too frequently.

What's left is an etching of the public Harvey Milk (shrewdly, Van Sant and screenwriter Dustin Lance Black don't start off by showing Milk's formative years, but with an intimate scene of the still-closeted Milk meeting his future boyfriend Scott Smith (James Franco) in a New York subway; the implication is that Milk the openly gay, outspoken politico was truly born then, on his 40th birthday), a compelling document of the rise of the Castro and the evolution of San Francisco politics, and especially a disturbing, if purposefully vague, portrait of Milk's assassin, fellow San Francisco supervisor Dan White (Josh Brolin).

Milk is a very good film, if not a great one. Those seeking Van Sant's narrative or visual idiosyncracies will be disappointed. But mainstream audiences who can endure a little same-sex kissing will be both educated and moved by Milk's tragic yet uplifting story.