# Opener

This crate provides the ability to open a file or link with the default program configured on the system.

See the docs for more details:

### [Docs](https://docs.rs/opener)

## License

Licensed under either of

* Apache License, Version 2.0
    (http://www.apache.org/licenses/LICENSE-2.0)
* MIT license
    (http://opensource.org/licenses/MIT)

at your option.

### Third party software

See LICENSE-THIRD-PARTY

## Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be
dual licensed as above, without any additional terms or conditions.
