diff --git a/app/ghcup/BrickMain.hs b/app/ghcup/BrickMain.hs
index 307f353f785ae517750a6fffa84d8d0318d1b0ec..20d01c4f8e08bf400071bba6061c351fed9fcbbc 100644
--- a/app/ghcup/BrickMain.hs
+++ b/app/ghcup/BrickMain.hs
@@ -283,7 +283,11 @@ changelog' AppState {..} (_, ListResult {..}) = do
     Nothing -> pure $ Left
       [i|Could not find ChangeLog for #{lTool}, version #{prettyVer lVer}|]
     Just uri -> do
-      exec "xdg-open" True [serializeURIRef' uri] Nothing Nothing >>= \case
+      let cmd = case _rPlatform pfreq of
+                  Darwin  -> "open"
+                  Linux _ -> "xdg-open"
+                  FreeBSD -> "xdg-open"
+      exec cmd True [serializeURIRef' uri] Nothing Nothing >>= \case
         Right _ -> pure $ Right ()
         Left  e -> pure $ Left [i|#{e}|]
 
diff --git a/app/ghcup/Main.hs b/app/ghcup/Main.hs
index 0d5a3af99b20d20163d811dfc588d3a95b729d07..5ddef19296e9c788561de0d08e5c2fe3e869095b 100644
--- a/app/ghcup/Main.hs
+++ b/app/ghcup/Main.hs
@@ -1308,9 +1308,14 @@ Make sure to clean up #{tmpdir} afterwards.|])
                   pure ExitSuccess
                 Just uri -> do
                   let uri' = T.unpack . decUTF8Safe . serializeURIRef' $ uri
+                      cmd = case _rPlatform pfreq of
+                              Darwin  -> "open"
+                              Linux _ -> "xdg-open"
+                              FreeBSD -> "xdg-open"
+
                   if clOpen
                     then
-                      exec "xdg-open"
+                      exec cmd
                            True
                            [serializeURIRef' uri]
                            Nothing