The Argentinian was a free agent after being released by Southampton in July, halfway through his four-year contract.
He joined Southampton from Roma in August 2013 for a club-record deal which was worth up to £14.6m but was loaned to Juventus after head-butting Saints captain Jose Fonte in a training-ground incident.
The 29-year-old moved to Inter Milan on loan in the summer of 2014, and then Boca Juniors in February and his move to Porto makes it five straight transfer windows in which he has changed clubs.
Porto confirmed the move on Twitter, posting a photo of Osvaldo holding the No 10 shirt with the caption “Welcome Osvaldo.”
Prior to joining Southampton, Osvaldo had left Roma under a cloud after throwing a tantrum when he was left out of the starting line-up against Lazio in the Coppa Italia final.
That action also prompted then Italy coach Cesare Prandelli to drop him from the Confederations Cup squad in 2013.
Porto will be the 12th club of Osvaldo’s chequered career, which began with Huracan in Argentina.
His first stop in Italy was Atalanta, followed by Lecce, Fiorentina and Bologna. He also had a spell on loan with Espanyol in Spain.