SMILES doesn't define a particular order in which the atoms show up in the string. Hence the position in the molecule where software starts printing will determine the string. E.g. for CO2:
- Ketcher prints
C(=O)=O (starts with C and considers one of the O's a branch)
- MarvinJS prints
O=C=O (starts iteration with O, hence no branching)
Both of these representations are valid, they simply start with different elements. Each tool would recognize SMILES string generated by another tool, so there's no need to convert between strings created by different software.
In order to make different tools generate the same string a so called Canonical SMILES was developed. Not every tool can generate it, but if they do - they'll spit out the same string (in theory).