
The Secret Life of Oscar Wilde , by Neil McKenna reviewed by Jim Herrick This new biography could well be subtitled “ the wild , wild sex of Oscar ” ; . It transforms our knowledge of Wilde by its detailed account of his engagement with the Victorian homosexual underworld . Richard Ellmann , whose biography ( 1987 ) is reckoned a classic , provides an authoritative and sympathetic portrait of the great writer ; but for the full picture McKenna ( a former editor of the Pink Paper ) is the biographer to read . Although the Ellmann biography deserves respect it can be wrong – ; that Wilde contracted syphilis seems unlikely , that he eschewed anal intercourse seems wrong . McKenna attempts to correct the view ( to which Ellmann subscribes ) that Wilde 's final years in Paris were unutterably miserable ; but alcoholism , poverty and quarrels with Bosie do not sound like bliss , even if some casual sex went some way to redeeming it . Unlike Bosie , who was busy buggering boys at Winchester public school , Wilde came late to homosexuality . The emotions preceded the actions – ; although his later hymns to neoplatonic love were undercut by his love of rough trade whether in Piccadilly or Algiers . His marriage came at a time when he was reaching for homosexual contacts , the classic attempt to deny the real feelings for the conventional alliance , a mistake that gay men still make today . Constance , his wife , was constant and gave him two sons , but the relationship was strained and they virtually separated as he lived a life of lust in hotels . He became a great talker and a great writer . His first big success was as a lecturer in America , representing the aesthete views and pose . He met Whitman and they recognised in each other the appeal of the love of comrades . His religion was art , although he could be superstitious and a Catholic priest fetched by Bosie brought him the last rites ; but there is nothing in his life or writing to suggest devotion to God or the church . He was more attracted to street boys than altar boys . The first writing that endorsed the love of boys was “ The Portrait of Mr . W. H. ” ; , an account of Shakespeare 's love of a youth in the sonnets . This was the first of the many occasions on which he hymned the love of the older for the younger man , as found in ancient Greece , or Michelangelo , as the love that dare not speak its name . The book that really blazoned homoerotic love was his first novel The Picture of Dorian Gray . That male beauty should last for ever – ; what a homosexual fantasy ! A character argues that it is society and religion which have suppressed men 's true nature . The book was talked about at times with an ominous disapproval . Wilde was gaining his courage as a writer . The plays which later became his great success have not the same homosexual undertones , but nevertheless the themes of loyalty , adultery and betrayal – ; the steel within the wit – ; have relevance to gay culture . Then came Bosie – ; the love of his life , although it did not seem so at first . Their relationship was tempestuous : they often quarrelled , neither had any instinct for a monogamous relationship , they both loved luxury which they could not really afford . Yet , it brought them ecstasy and disaster . Bosie 's father , the Marquis of Queensberry , provided the catastrophe – ; an arch-homophobe , a pugilist and , embarrassingly , the president of the British Secular Union ( a breakaway group from the National Secular Society ) . Was the man who was behind the Queensberry Rowing and Athletic Club at the secularist Hall of Science likely to send soft encouraging notes to his two gay sons ? The biographers have missed this aspect of the sulphurous Queensberry . The detestation of homosexuality , especially homosexual acts , lay side by side with a gay demimonde , a punishing legal system and a nascent sexual reform movement . McKenna reveals this in considerable detail and it is the great strength of the book . It gives great insight into nineteenth-century gay history . In 1885 the maximum punishment for sodomy was life imprisonment , although the insertion of semen had to be proved – ; quite a difficult test . Other sexual acts between men were not criminal , until Labouchère produced his famous amendment – ; this was apparently a reaction to what was thought the increasing “ scourge ” ; of homosexuality . Perhaps they should have closed down the public schools . As is often the case , there may have been an increase of visibility rather than a growth of the tendency . Oscar Wilde was on the edge of visibility – ; and Bosie was positively a campaigner . They called themselves Uranians , a word which came from the German lawyer Ulrichs , who coined the term “ uranismus ” ; from “ uranios ” ; or “ heavenly love ” ; of Aphrodite , daughter of Uranus . They started a magazine , the Chameleon , and began to talk of the Cause . McKenna 's account of this area brings out new detail . He also offers information about Lord Roseberry 's affair with Bosie 's brother Drumlanrig , which is not fully given elsewhere . There was even a suggestion of a conspiracy against Wilde from the top of society to divert attention from Roseberry 's sexual activities . The story of Wilde 's trials are well known : the libel case which he brought against Queensberry and withdrew when it was clear that he was going to lose , then the two trials ( one with an indecisive jury ) for indecency , and the cruel sentence of two years ' imprisonment with hard labour . Why did not Wilde escape to France , as he was urged to do by his friends ? Arrogance , inertia or , as McKenna suggests , defiance on behalf of the Cause ? There are moments when McKenna almost seems to be suggesting that there was full gay rights campaigning in the 1890s , which is overstating it . Nevertheless , he gives a fine portrait of a man who wrote to Bosie in extremis , while waiting for the trial to start , “ Every great love has its tragedy , and now ours has too , but to have known and loved you with such profound devotion , to have had you for part of my life , the only part I now consider beautiful , is enough for me . ” ; Copyright © 2004 The Pink Triangle Trust . All rights reserved . For more information or to buy The Secret Life of Oscar Wilde , visit the 