Inbound email is the part that breaks. On a dedicated server you can pipe mail into a script at delivery time. On shared hosting the realistic route is IMAP polling: a cron job runs every minute or two, connects to the mailbox, pulls unread messages and creates tickets. Three things have to be true at once, and the failure of any one looks identical from outside: cron running, the php-imap extension enabled on the PHP version the cron job uses rather than the one serving the site, and the mailbox reserved for the help desk, because background fetching only sees unread mail.
Watch the PHP ceiling. osTicket 1.18.4 supports PHP 8.2 to 8.4 and will not run on 8.5, so this is one of the few applications where you deliberately select an older branch. FreeScout is broader, and as a Laravel application it expects the document root pointed at its public directory, not the project root.
Skip Trouble Ticket Express. It is a Perl CGI application with no current release and a public record of remote code execution issues. Listing it is not a recommendation.
Not for you if you need CSAT surveys, contractual SLA reporting, live chat, voice, or shift routing across fifteen agents. That is what the commercial platforms charge for, and rebuilding it in modules costs more than paying for it.